Java heap terminologie: des jeunes, des vieux et permanent des générations?
J'essaie de comprendre Ce que les concepts de jeune, vieux et permanent générations sont dans le tas Java terminologie, et plus précisément les interactions entre les trois générations.
Mes questions sont:
- Qu'est-ce que la jeune génération?
- Qu'est-ce que l'ancienne génération?
- Qu'est-ce que la génération permanente?
- Comment les trois générations interagir/se rapportent les uns aux autres?
- En supposant que vous parlez de la Sun JDK/OpenJDK, voir la page sur l'OpenJDK site web sur Gestion du Stockage. Il y a quelques liens pour encore plus d'informations en bas.
- également liées à cette question "permanent de la génération"
Vous devez vous connecter pour publier un commentaire.
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 est un bon post sur génération permanente.
J'aime les descriptions fournies pour chaque espace dans Oracle guide sur la JConsole:
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.
Jeune Génération : Il est le lieu où a vécu pendant une courte période et est divisé en deux espaces:
sur cet espace.
ont survécu après la java de collecte des ordures de l'Eden de l'espace.
Ancienne Génération : Cette piscine contient essentiellement la permanence et virtuel
(réservés) l'espace et le sera de la détention de ces objets qui ont survécu
après la collecte des ordures de la Jeune Génération.
Génération permanente : Ce pool de mémoire que le nom dit aussi contenir des permanents de la classe de métadonnées et les descripteurs de l'information afin PermGen space toujours réservé pour des cours et celles qui sont liées aux classes pour l'exemple des membres statiques.
Cache de Code (Virtuel ou réservés) : Si vous êtes en utilisant HotSpot de la machine virtuelle Java cela inclut le code de zone de cache qui contient de la mémoire qui sera utilisée pour la compilation et le stockage du code natif.
Courtoisie
La Jeune Génération est là que tous les nouveaux objets sont alloués et les personnes âgées. Quand la jeune génération se remplit, ce qui provoque un mineur de collecte des ordures. Une jeune génération pleine de morts des objets recueillis très rapidement. Certains ont survécu objets sont âgés et, éventuellement, d'aller à l'ancienne génération.
La Ancienne Génération est utilisé pour stocker de longs objets survivants. Généralement, un seuil est défini pour les jeunes de la génération de l'objet et lorsque que l'âge est remplie, l'objet est déplacé à l'ancienne génération. Éventuellement, l'ancienne génération a besoin d'être recueillies. Cet événement est appelé un majeur de la collecte des ordures
La génération Permanente contient des métadonnées requises par la JVM pour décrire les classes et les méthodes utilisées dans l'application. La génération permanente est peuplée par la JVM au moment de l'exécution basé sur les classes utilisées par l'application.
PermGen a été remplacé par Metaspace depuis Java 8 release.
PermSize & MaxPermSize paramètres seront ignorés aujourd'hui
Source de l'Image & oracle technetwork tutoriel de l'article: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html
"Le Général de Collecte des Ordures Processus" dans l'article ci-dessus explique les interactions entre eux avec de nombreux diagrammes.
Ont un coup d'oeil au schéma de synthèse:
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.
Mémoire dans SunHotSpot JVM est organisé en trois générations: les jeunes de la génération, de la vieille génération et la génération permanente.
FYI: Le permanent gen n'est pas considéré comme une partie du tas Java.
Comment les trois générations interagir/se rapportent les uns aux autres?
Les objets(sauf les grands) sont d'abord imputés à la jeune génération. Si un objet restent en vie après x no. de la collecte des ordures cycles, il sera promu à l'ancienne/la titulaire gen. Par conséquent, nous pouvons dire que le jeune gen contient la courte durée des objets, alors que l'ancienne gen contient les objets ayant une longue durée de vie. La permanente gen n'interagit pas avec les deux autres générations.