Question

  1. Y at-il moyen de mesurer l'heure actuelle utilisé taille de la génération permanente (PermGen) dans mon application Java? Je ne peux pas utiliser des outils de profilage externes tels que VisualVM.

  2. Mieux encore serait une estimation de la consommation de mémoire d'une classe Java dans le PermGen. Est-il presque proportionnel à la taille du fichier bytecode?

Était-ce utile?

La solution

Vous pouvez utiliser MemoryMXBean qui vient avec JDK. Mais je ne pense pas qu'il y ait un moyen de requête sur l'utilisation de PermGen à partir d'une application en cours d'exécution. Docs sur MemoryMXBean .

Autres conseils

Vous pouvez utiliser jvisualvm outil de JDK avec plug-in visuel GC pour surveiller les zones de toutes les JVM, y compris PermGen.

Si vous n'êtes pas sur Windows, vous pouvez essayer jmap qui est livré avec le JDK.

Vous pouvez utiliser la commande jmap:

  

jmap [option]       (Pour se connecter au processus en cours d'exécution)

     

jmap [option]       (Pour se connecter à un fichier de base)

     

jmap [option] [server_id @]       (Pour se connecter au serveur de débogage à distance)

où des options est l'un:

  

-heap: imprimer résumé tas java

     

-permstat: pour imprimer des statistiques permanentes de génération

La taille de PermGen n'a rien à voir avec la taille de vos fichiers de classe. La taille par défaut de PermGen selon Sun est de 64 MB. Si vous souhaitez augmenter vous pouvez le configurer en utilisant explicitement:

-XX:PermSize=164m

dans votre ligne de commande Java ou script de démarrage. Ceci est également comment vous pouvez savoir ce qu'il est mis à sans compter sur un outil externe.

EDIT:

Lisez cet article pour déterminer approximativement combien PermGen est actuellement utilisé par programme (à savoir pas d'outils externes):

http: //frankkieviet.blogspot. com / 2006/10 / how-to-fix-redoutée-PermGen-space.html

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