2010-04-06 9 views
1

Dans la JVM Sun, les classes chargées par le chargeur de classe sont placées dans un espace permgen et ne sont jamais gcées. (À moins que le chargeur de classe ne soit hors de portée) Je crois comprendre que JRockit place les mêmes données sur le tas à la place. Ces données sont-elles alors soumises à la collecte des ordures?Sun permgen & JRockit garbage collection

Merci.

Répondre

2

Le problème n'a rien à voir avec les classes sont allouées. Le problème est que les classloaders gardent toujours des références à leurs classes, ce qui signifie que les classes ne peuvent pas être collectées à moins que leur classeloader ne soit récupéré.

Ce problème est plus évident sur HotSpot, car la mémoire PermGen est rare et coûteuse.

0

Un autre point saillant cependant est que PermGen est souvent épuisé dans Sun, où d'autres JVM peuvent allouer dans un autre espace pas si limité.

+0

Ouais, j'aime la façon dont JRockit le gère beaucoup mieux que Sun. – Striker

+0

Certains soutiennent qu'IBM aussi. Le revers de la médaille est que parfois, vous pouvez ajouter beaucoup dans le texte de la classe et peut ne pas être le plus facile à détecter les fuites ou le texte tenu. Sun vous permet de signaler au moins un peu plus facilement les données qui y sont contenues et de les syntoniser de manière préemptive. – Xailor