Wie die Größe von PermGen innerhalb einer Java-Anwendung (das heißt programmatisch) bestimmen?
-
28-09-2019 - |
Frage
-
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.
-
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?
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