Question

Je suis en train de comprendre quels sont les concepts de jeunes , vieux et générations permanentes sont dans la terminologie de tas Java, et plus particulièrement les interactions entre les trois générations.

Mes questions sont les suivantes:

  • Qu'est-ce que la jeune génération?
  • Qu'est-ce que l'ancienne génération?
  • Quelle est la génération permanente?
  • Comment le trois générations interagissent / sont liées entre elles?
Était-ce utile?

La solution

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

Voici un bon poste sur génération permanente.

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

  

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

     
      
  • Espace Eden (de tas): La piscine à partir de laquelle la mémoire est allouée initialement   pour la plupart des objets.
  •   
  • Survivor espace (tas): La piscine contenant des objets qui ont survécu   la collecte des ordures de l'Eden   l'espace.
  •   
  • Génération Titularisé (tas): La piscine contenant des objets qui ont existé   pendant un certain temps dans l'espace de survie.
  •   
  • Génération permanente (non tas): La piscine contenant tous les réfléchissant   les données de la machine virtuelle elle-même,   tels que des objets de classes et méthodes. Avec   Machines virtuelles Java qui utilisent le partage de données de classe,   cette génération est divisée en   lecture seule et lecture-écriture des zones.
  •   
  • Code de cache (non tas): Java HotSpot VM comprend également un cache de code,   contenant une mémoire qui est utilisée pour   la compilation et le stockage des indigènes   code.
  •   

Java utilise la collecte des ordures générationnelle. Cela signifie que si vous avez un foo objet (qui est une instance d'une classe), les autres événements de collecte des ordures (il survit s'il y a encore des références à lui), plus il est promu. Il commence dans la jeune génération (qui est elle-même divisée en plusieurs espaces - Eden et survivant). Et finirait par se retrouver dans la génération titularisé si elle a survécu assez longtemps

Autres conseils

  

Le Heap est divisé en générations jeunes et vieux comme suit:

Jeune génération : Il est le lieu où a vécu pour une courte période et divisée en deux espaces:

  • Espace Eden : Lorsque l'objet créé à l'aide nouvelle mémoire mot-clé attribué cet espace.
  • Survivor Espace : C'est la piscine qui contient des objets qui ont survécu après la collecte des ordures java de l'espace Eden.

ancienne génération : Ce pool contient essentiellement virtuel et titularisé    (Réservé) et l'espace seront maintenant les objets qui ont survécu    après la collecte des ordures de la jeune génération.

  • Espace Titularisé:. Ce pool de mémoire contient des objets qui ont survécu après la collecte des ordures multiples signifie objet qui a survécu après la collecte des ordures de l'espace Survivor

Génération permanente:. Ce pool de mémoire comme nom l'indique contient également des métadonnées de classe permanente et les descripteurs d'information si l'espace PermGen toujours réservée aux cours et ceux qui est lié aux classes par exemple les membres statiques

  

Mise à jour Java8:. PermGen est remplacé par Metaspace qui est très similaire
  La principale différence est que Metaspace redimensionne dynamiquement à savoir, il peut se développer à l'exécution.
  espace Java Metaspace: non borné (par défaut)

Code de cache (virtuel ou réservé): Si vous utilisez HotSpot Java VM ce qui inclut la zone de cache de code contenant une mémoire qui sera utilisée pour la compilation et le stockage du code natif

.

entrer image description ici

Courtoisie

  

Qu'est-ce que la jeune génération?

Jeune génération est où sont attribués tous les nouveaux objets et personnes âgées. Lorsque la jeune génération se remplit, ce qui provoque une collecte des ordures mineures. Une jeune génération pleine d'objets morts est recueilli très rapidement. Certains objets sont survécurent ans et finalement passer à l'ancienne génération.

  

Qu'est-ce que l'ancienne génération?

ancienne génération est utilisé pour stocker des objets longs survivants. En règle générale, un seuil est fixé pour objet la jeune génération et quand cet âge est atteint, l'objet est déplacé à l'ancienne génération. Finalement, l'ancienne génération doit être recueillie. Cet événement est appelé principale la collecte des ordures

  

Quelle est la génération permanente?

Génération permanente contient les métadonnées requises par la machine virtuelle Java pour décrire les classes et les méthodes utilisées dans l'application. La génération permanente est peuplée par la machine virtuelle Java à l'exécution en fonction des classes utilisées par l'application.

PermGen a été remplacé par Metaspace depuis la version Java 8.

PermSize & MaxPermSize paramètres seront ignorés maintenant

  

Comment le trois générations interagissent / sont liées entre elles?

 ici

Source de l'image et oracle TechNetwork article tutoriel: http: //www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

« Le processus de collecte des ordures générales » dans l'article ci-dessus explique les interactions entre eux avec de nombreux schémas.

Jetez un oeil à schéma sommaire:

 ici

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

Mémoire JVM SunHotSpot est organisée en trois générations: la jeune génération, ancienne génération et génération permanente.

  • Jeune génération:. Les objets nouvellement créés sont attribués aux jeunes gen
  • ancienne génération: Si les nouvelles demandes d'objet pour un espace de tas plus, il obtient attribués directement dans l'ancienne génération. aussi des objets qui ont survécu à quelques cycles de GC est promu à l'ancienne génération i.e. maison objets longtemps vécu dans l'ancienne génération.
  • Génération permanente. La génération permanente contient des objets que la machine virtuelle Java trouve pratique d'avoir le garbage collector gérer, tels que des objets décrivant les classes et méthodes, ainsi que les mêmes classes et méthodes

Pour votre information:. Le gen permanent est pas considéré comme une partie du tas Java

Comment le trois générations interagissent / sont liées entre elles?       Les objets (sauf les grandes) sont d'abord attribués à la jeune génération. Si un objet reste en vie après x pas. des cycles de collecte des ordures, il est promu à l'ancienne / gen titularisé. Par conséquent, nous pouvons dire que le jeune génération contient les objets à vie courte alors que l'ancienne génération contient les objets ayant une longue durée de vie. La génération permanente n'interagit pas avec les deux autres générations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top