Wie die Größe von PermGen innerhalb einer Java-Anwendung (das heißt programmatisch) bestimmen?

StackOverflow https://stackoverflow.com/questions/4071440

Frage

  1. Gibt es eine Möglichkeit die zur Zeit zu messen verwendet Größe des permanenten Generation (PermGen) innerhalb meiner Java-Anwendung? Ich kann nicht auf externe Profilierwerkzeuge wie VisualVM verwenden.

  2. Noch besser wäre eine Schätzung des Speicherverbrauches einer Java-Klasse in den PermGen sein. Ist es fast proportional zur Größe der Bytecode-Datei?

War es hilfreich?

Lösung

Sie könnten MemoryMXBean verwenden, die mit JDK kommt. Aber ich glaube nicht, es gibt einen Weg zu Abfrage im Permgen Verwendung in einer laufenden Anwendung. Dokumente im Internet zu MemoryMXBean .

Andere Tipps

Sie können mit jvisualvm Tool von JDK mit Visuelle GC Plugin alle Bereiche einschließlich PermGen Heap JVM überwachen.

Wenn Sie nicht auf Windows, könnten Sie versuchen, jmap , die mit dem JDK ausgeliefert wird.

Sie können den jmap Befehl:

  

jmap [Option]       (Zu laufenden Prozess verbinden)

     

jmap [Option]       (Für den Anschluss an eine Core-Datei)

     

jmap [Option] [server_id @]       (Zum Anschluss an externe Debug-Server)

Dabei gilt Optionen eines von:

  

-heap: java heap Zusammenfassung drucken

     

-permstat: permanent Generation Statistiken drucken

Die Größe des PermGen hat nichts mit der Größe der Klassendateien zu tun. Die Standardgröße von PermGen nach Sun ist 64 MB. Wenn Sie es erhöhen möchten, können Sie es explizit festgelegt werden:

-XX:PermSize=164m

in Ihrer Java-Befehlszeile oder Startskript. Dies ist, wie auch Sie wissen, was es zu setzen ist, ohne sich auf ein externes Tool zu verlassen.

EDIT:

Lesen Sie diesen Artikel in etwa zu bestimmen, wie viel PermGen derzeit programmatisch verwendet wird (das heißt keine externen Tools):

http: //frankkieviet.blogspot. com / 2006/10 / how-to-fix-gefürchtete-PermGen-space.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top