web-dev-qa-db-fra.com

Où sont stockées les variables d'instance d'un objet dans la JVM?

Une variable d'instance d'un objet dans Java est-elle stockée sur la pile ou la zone de méthode de la JVM?

De plus, avons-nous une variable d'instance différente pour plusieurs threads?

Si elle est stockée dans la zone de méthode, en quoi la variable d'instance est-elle différente du stockage de variable statique?

15
saurabh goyal

Stack et heap sont les mémoires allouées par le système d'exploitation à la machine virtuelle Java qui s'exécute dans le système. Stack est une mémoire endroit où les méthodes et les variables locales sont stockées. (les références de variables sont soit primitive ou objet les références sont également stockées dans la pile). Heap est un emplacement mémoire où les objets et sa variable d'instance sont stockés.

Donc, pour résumer:

  • Objets de classe, y compris le code de méthode et les champs statiques: tas.
  • Objets, y compris les champs d'instance: tas.
  • Variables locales et appels aux méthodes: pile

De plus, avons-nous une variable d'instance différente pour plusieurs threads?

Chaque thread aura un compteur de programme (PC) et une pile Java. PC utilisera la pile Java pour stocker les valeurs intermédiaires, la liaison dynamique, les valeurs de retour) pour les méthodes et les exceptions de répartition. Ceci est utilisé à la place des registres.

De plus, pour en savoir plus sur le thread, vous devriez vraiment lire cette rubrique Où est créé l'objet Thread? Stack or Heap? .

Si elle est stockée dans la zone de méthode, en quoi la variable d'instance est-elle différente du stockage de variable statique?

Comme vous pouvez le voir ci-dessus champs statiques sont stockés en tas. En revanche, variables locales sont stockées dans la pile.

//ÉDITER

Selon les commentaires de Bruno Reis et Peter Lawrey , vous devriez également lire à propos de Analyse d'évasion

  1. Wikipedia
  2. Améliorations des performances de la machine virtuelle, analyse d'échappement
20
Matej Špilár

Pour être précis,

  • Les variables d'instance seront stockées sur le tas.
  • variables locales sur la pile (en cas de variable pas une primitive [variable de référence] variables de référence en direct sur la pile
    et l'objet sur le tas). Seuls l'appel de méthode et les résultats partiels seront stockés dans la pile et non la méthode elle-même.
  • Variables statiques et méthodes (y compris statiques et non statiques) dans la zone de méthode.

Référence: Head First Java

4
Jayanth