8
votes

Est une partie de génération permanente du tas ou est-elle résiduit dans un espace différent de lui-même dans JVM

J'ai vu plusieurs commentaires concernant cette question - certains disent oui et certains disent non, et beaucoup de réponses sont ambiguës. Quelqu'un peut-il s'il vous plaît décrire en termes simples où il réside? Dans un poste, j'ai même vu quelqu'un dire que cela partage le même lieu de mémoire que la mémoire de classe où les classes sont chargées par des chargeurs de classe - est-ce vrai?


3 commentaires

Cela aiderait votre question à avoir des liens vers les commentaires que vous faites référence, afin que nous puissions les lire aussi.


Ne suivez pas ce que vous demandez réellement? Le JVM est-il réellement co-localiser dans son espace mémoire les données considérées comme permanentes avec des espaces de collection? Probablement seul le gars qui l'a écrit peut-il peut vous dire ça. Conceptuellement, il peut être considéré comme «tas» car les choses sont allouées de manière dynamique dans au moment de l'exécution, ils ne partent jamais. Configuration sage, il s'agit d'une quantité distincte de mémoire allouée en plus du "tas".


J'ai eu la même question et atterri à ce lien après avoir lu toutes les réponses, je peux dire que la question reste toujours ouverte ..


5 Réponses :


4
votes

Original (peut-être trompé) Réponse: Si Wikipedia doit être cru, c'est partie du tas.

Modifier: J'ai examiné autour de cela, y compris le site référencé dans un commentaire de l'OP. Au cours de cette recherche, je suis tombé sur cette question à la question , quelles références Ce document , qui indique que pour le soleil Java (version 6), la collection permanente est en fait à l'extérieur du tas. Cela dit, je ne suis pas un expert Java et je n'avais pas auparavant au courant des détails de la gestion de la mémoire à ce niveau. Si ma lecture est correcte, le placement - ou même l'existence - de la génération permanente est un détail de mise en œuvre JVM.


6 commentaires

Voir ce lien..C'est dit qu'il est différent. QUELA TORE CROYEZ :( blogs.oracle. com / jonthecollector / entrée / ...


Je suis totalement confus: '(En ce qui concerne cette


Eh bien, quelle est la différence pour vous , alors? Pourquoi ne pas régler sur ce point de vue - que Perm Gen est compté séparément du "tas". Quelles sont les conséquences pour vous si le résultat est-il ou le contraire?


@Nav: réponse mise à jour. En outre, j'enfonce un commentaire de Victor Sorokin un peu: est-ce vraiment important pour quelque chose que vous travaillez? Si c'est le cas, comment? Savoir alors peut aider quelqu'un à vous aider. (Bien que je doute que je puisse vous aider, plus). Bonne chance!


Je voulais juste savoir ... J'ai vu trop de réponses tellement confondues alors pensées demandera aux experts;)


Merci d'avoir pris le temps Matt :)



1
votes

Voici ma compréhension du sujet:

La génération permanente est la région du tas où les définitions de classe sont stockées. Comme indiqué à http://blogs.oracle.com/jonthecollector/enterry/presenting_the_permanent_generation , Toutes les instances de classe ont une référence «KLAS» à une instance de la classe de leur type dans la génération permanente. Lorsque de nouveaux types sont créés au moment de l'exécution, un nouvel espace est attribué dans la génération permanente pour leurs types.

Le diagramme sur le blog de Jon Masamitsu montre la séparation logique entre la génération permanente et les parties plus fréquemment collectées du tas où les instances d'objet de votre programme peuvent être stockées. La génération permanente fait toujours partie du tas.


0 commentaires

2
votes

d'une perspective de blackbox, dans Sun JVMS, la génération permanente n'est pas une partie partie du tas comme indiqué dans jconsole socumentation :

génération permanente (non-tas): la piscine contenant tous les données réfléchissantes de la machine virtuelle elle-même, telle que la classe et objets de méthode. Avec Java VMS qui utilisent le partage de données de classe, cela La génération est divisée en zones en lecture seule et en lecture seule.

Dans la pratique, cela signifie que votre -xx: maxpermsize ajoute jusqu'à votre mémoire -xmx dans le processus JVM, car la génération permanente n'est pas incluse dans le tas .


0 commentaires

1
votes

Je suis venu la même question lors de la lecture ordures Java Bases de base , dans ce Turorial, l'auteur voit la génération permanente fait partie du tas.

Mais nous avons tous les deux:


0 commentaires

0
votes

Permgen est supprimé de Java 8. Nous avons maintenant des métaspaces qui ne font pas partie du tas et une partie de la mémoire interne.

aussi les commandes -Xmx -Xx: maxpermsize sera ignoré de Java 8

http://java.dzone.com/articles/java-8 -permgen-métaspace


0 commentaires