Warum wächst PermGen?
Ich habe ein paar Artikel, und ich Verstand Folgendes (bitte korrigieren Sie mich und/oder Bearbeiten Sie die Frage, wenn ich falsch Liege):
Den java-heap aufgeteilt ist wie diese:
- Junge Generation: die Objekte, die erstellt werden, gehen Sie hier, dieses Teil ist Häufig und kostengünstig Müll gesammelt
- Alten Generation: Objekte, die das überleben der garbage Collection der Jungen generation gehen hier, diesem Bereich ist die garbage Collection weniger Häufig und mit mehr CPU-anspruchsvollen Verfahren/Algorithmus (ich glaube er heißt mark-sweep)
Edit: wie bereits von einem anderen Benutzer, der PermGen ist nicht ein Teil der region genannt heap
- PermGen: dieser Bereich gefüllt ist der app-Klassen, Metadaten und viele andere Dinge, die nicht abhängig von der Anwendung.
So, dies zu wissen... warum tut mein PermGen space wächst, wenn die app ist unter der schweren Last? Für das, was ich sagte, bevor dieser Raum sollte nicht inkrementell zu füllen, trotz der app laden, aber wie ich am Anfang gesagt habe bin ich wahrscheinlich falsch über einige Annahmen.
In der Tat, wenn die PermGen space wächst, gibt es eine Möglichkeit, Müll zu sammeln oder es zurücksetzen?
InformationsquelleAutor der Frage Pablo Fernandez | 2010-01-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tatsächlich, in der Sun JVM Permanent Generation (PermGen) ist völlig getrennt vom heap. Sind Sie sicher, dass Sie sind nicht auf der Suche an der Pragmatisierte Generation? Es wäre in der Tat verdächtig, wenn Sie Ihren Ständigen Generation sind gewachsen.
Wenn Ihr perm gen wächst ständig, es ist ein schwieriges Gebiet zu Graben, in. In der Regel sollte es wachsen, wenn neue Klassen geladen werden, die für die erste Zeit (und potenziell bestimmte Verwendungen der Reflexion kann auch dazu führen, diese). Interniert strings werden ebenfalls gespeichert, in perm gen.
Wenn Sie zufällig auf Solaris, könnten Sie jmap -permstat dump aus perm gen Statistiken, aber diese option scheint nicht verfügbar zu sein, die auf Windows (und möglicherweise andere Plattformen). Hier ist die Dokumentation auf jmap für Java 6
Aus Sonne Handbuch auf JConsole (mit denen Sie die Größe dieser pools):
InformationsquelleAutor der Antwort Joshua McKinnon
Den häufigsten Ursachen, die ich gesehen habe sind:
InformationsquelleAutor der Antwort John Stauffer
Dies ist eines der lästigen Probleme zu Debuggen. Es gibt eine Menge Gründe, Sie konnte sehen, wächst der permgen verwenden. Hier sind 2 links fand ich sehr nützlich, sowohl zu verstehen, wie Lecks passieren, sowie das aufspüren, was die Ursache Sie.
http://frankkieviet.blogspot.com/2006/10/how-to-fix-dreaded-permgen-space.html
http://frankkieviet.blogspot.com/2006/10/classloader-leaks-dreaded-permgen-space.html
InformationsquelleAutor der Antwort Jason Stelzer
Tun Sie etwas funky mit dem classloader Kette? Rufen Sie
intern()
auf eine Reihe von Zeichenfolgen?InformationsquelleAutor der Antwort Jonathan Feinberg
Wenn Sie die Arbeit mit Java EE-Anwendung, ist es wahrscheinlich eine classloader-Leck.
finden Sie vielleicht die folgenden weiterführenden links nützlich sein:
http://www.zeroturnaround.com/blog/rjc201/
http://www.ibm.com/developerworks/java/library/j-dclp3/index.html
InformationsquelleAutor der Antwort Sajid
Den häufigsten Ursachen, die ich gesehen habe sind:
InformationsquelleAutor der Antwort stones333
Dies ist ein sehr häufiges problem, wenn Sie so manipulieren, dass der classloader. Das ist viel gesehen in Java EE-Anwendungen, wenn Sie die Versetzung von hibernate/cglib. Für mehr info check out
http://opensource.atlassian.com/confluence/spring/display/DISC/Memory+leak+-+classloader+won%27t+let+go
InformationsquelleAutor der Antwort Jim Mitchener