362 votes

Terminologie de tas de Java : les générations jeunes, vieux et permanentes ?

J’essaie de comprendre comment les concepts de jeunes, vieux et générations permanentes dans le Java heap terminologie et plus précisément les interactions entre les trois générations.

Mes questions sont :

  • Ce qui est la jeune génération ?
  • Ce qui est l’ancienne génération ?
  • Ce qui est la génération permanente ?
  • Comment les trois générations interagissent/se rapporte-t-il à l’autre ?

337voto

Joshua McKinnon Points 12379

Cela semble être un malentendu commun. Dans l'Oracle de la JVM, la génération permanente n'est pas partie du tas. C'est un espace séparé pour les définitions de classe et de données connexes. Dans Java 6 et les versions antérieures, interné chaînes sont également stockées dans la génération permanente. Dans Java 7, interné chaînes de caractères sont stockées dans l'objet principal de tas.

Ici, c'est un bon post sur génération permanente.

J'aime les descriptions fournies pour chaque espace dans Oracle du guide sur la JConsole:

Pour le HotSpot de la machine virtuelle Java, la mémoire les piscines pour la série de collecte des ordures sont les suivantes.

  • Eden Space (tas): La piscine à partir de laquelle la mémoire est initialement allouée pour la plupart des objets.
  • Survivor Space (tas): La piscine contenant des objets qui ont survécu la collecte des ordures de l'Eden de l'espace.
  • Permanent de la Génération (tas): La piscine contenant des objets qui ont existé depuis quelques temps, dans le survivant de l'espace.
  • Génération permanente (non-tas): La piscine contenant tous les réfléchissantes les données de la machine virtuelle elle-même, comme la classe et de la méthode des objets. Avec De machines virtuelles Java qui utilise la classe de partage de données, cette génération est divisé en en lecture seule et en lecture-écriture domaines.
  • Cache de Code (de non-tas): Le point de connexion de la machine virtuelle Java comprend également un cache de code, contenant de la mémoire qui est utilisée pour la compilation et le stockage des indigènes code.

Java utilise les générations de collecte des ordures. Cela signifie que si vous avez un objet foo (qui est une instance d'une classe), plus la quantité de déchets d'activités de collecte, il survit (si il y a encore des références à celui-ci), plus il sera promu. Il commence dans la jeune génération (qui est lui-même divisé en plusieurs espaces d'Eden et de survie) et finirait par se retrouver dans l'permanent de la génération, si elle a survécu assez longtemps.

18voto

Mark R Points 223

La machine virtuelle Java est organisé en trois générations: une jeune génération, une génération plus ancienne, et une génération permanente. La plupart des objets sont attribuées initialement dans la jeune génération. La vieille génération contient des objets qui ont survécu à un certain nombre de la jeune génération des collections, ainsi que certains grands objets qui peuvent être affectés directement dans l'ancienne génération. La génération permanente contient des objets que la JVM trouve pratique d'avoir le garbage collector gérer, tels que les objets de la description des classes et des méthodes, ainsi que les classes et les méthodes elles-mêmes.

11voto

Thomas Pornin Points 36984

Cet article est une très bonne enquête sur les ramasseurs d'ordures. Il définit les concepts de base et terminologie de la collecte des ordures et comprend de nombreux dessins explicatifs. C'est un "must read" pour quelqu'un qui est intéressé par la façon dont automatique de l'allocation de la mémoire des œuvres; la lecture, il sera beaucoup plus facile pour vous de lire et de comprendre les différents documents que d'autres l'ont fait.

(Ce que le document manque de toute information sur le poste de 1993, la recherche sur les ramasseurs d'ordures, en particulier le fait que les systèmes multi-core. Encore, vous avez à apprendre à marcher avant d'apprendre à courir.)

4voto

Nicholas Riley Points 26161

En supposant que vous parlez sur le Sun JDK/OpenJDK, consultez la page sur le site Web de Gestion du stockageOpenJDK. Il y a quelques liens pour plus d’informations au bas de même.

3voto

stacker Points 34209

Bien qu’il soit, sur le réglage, je ne résiste pas à recommander ce document jetez un oeil au chapitre 3 et aller en profondeur, si vous le souhaitez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X