[Gute Beschreibung] [1] von dem Typ, der viel über GC-Interna weiß. Übrigens gibt es in seinem Blog viele nützliche GC-bezogene Informationen. [1]: blogs.oracle.com/jonthecollector/entry/…
Ivan Dubrov
Antworten:
84
Permanente Generation. Details sind natürlich implementierungsspezifisch.
Kurz gesagt, es enthält die Java-Objekte, die Klassen und internierten Zeichenfolgen zugeordnet sind. In der Client-Implementierung von Sun mit aktivierter Freigabe classes.jsawird der Speicher so zugeordnet, dass er die Anfangsdaten bildet, wobei etwa die Hälfte schreibgeschützt und die Hälfte schreibgeschützt ist.
Nur alte Java-Objekte werden in der Tenured Generation gespeichert.
PermGen wird von der JVM verwendet, um geladene Klassen zu speichern. Sie können es erhöhen mit:
-XX:MaxPermSize=384m
Wenn Sie Sun JVM oder OpenJDK verwenden.
Wenn Sie also eine OutOfMemoryException: PermGen erhalten, müssen Sie entweder PermGen vergrößern, oder Sie haben möglicherweise Probleme mit dem Klassenladeprogramm.
Welche Antwort wurde zum Zeitpunkt der Veröffentlichung dieses Kommentars akzeptiert? Die aktuell akzeptierte Antwort ( diese von "Tom Hawtin - Tackline") sieht für mich korrekt aus. Könnte es sinnvoll sein, Ihren Kommentar so zu bearbeiten, dass die Leute der aktuell akzeptierten Antwort nicht misstrauen?
Jbyler
20
Permanente Generation. Weitere Informationen zum Garbage Collector finden Sie im Java GC-Optimierungshandbuch .
Nicht wirklich mit der ursprünglichen Frage verwandt, aber möglicherweise wird es jemand nützlich finden. PermGen ist in der Tat ein Bereich im Speicher, in dem Java seine Klassen beibehalten hat. So sind viele von uns in PermGen auf OOM gestoßen, wenn es zum Beispiel viele Klassen gab.
Seit Java 8 wurde der PermGen-Bereich durch den MetaSpace-Bereich ersetzt, der effizienter und standardmäßig unbegrenzt ist (oder genauer gesagt - begrenzt durch die Menge des nativen Speichers, abhängig von der Verfügbarkeit von 32- oder 64-Bit-JVM und dem virtuellen Speicher des Betriebssystems). Es ist jedoch möglich, es auf einige Arten abzustimmen, indem beispielsweise eine maximale Grenze für den Bereich angegeben wird. Weitere nützliche Informationen finden Sie in diesem Blogbeitrag .
Wenn ich mich richtig erinnere, steht das Gen für Generation, wie in einem Generationsmüllsammler (der jüngere Objekte anders behandelt als Mid-Life- und "permanente" Objekte). Das Prinzip der Lokalität legt nahe, dass kürzlich erstellte Objekte zuerst gelöscht werden.
Permgen steht für Permanent Generation. Es ist einer der JVM-Speicherbereiche. Es ist Teil von Heap mit fester Größe, indem ein Flag namens MaxPermSize verwendet wird.
Warum der Name "PermGen"?
Dieses Permgen wurde in den frühen Tagen von Java benannt. Das Permgen-Netz speichert alle Metadaten geladener Klassen. Das Problem ist jedoch, dass eine geladene Klasse bis zum Herunterfahren der JVM in der JVM verbleibt. Der Name Permgen ist also dafür entschieden. Später kam das dynamische Laden von Klassen ins Spiel, aber der Name wurde nicht geändert. Aber mit Java 8 haben sie auch dieses Problem behoben. Jetzt wurde Permagen in MetaSpace mit dynamischer Speichergröße umbenannt.
Antworten:
Permanente Generation. Details sind natürlich implementierungsspezifisch.
Kurz gesagt, es enthält die Java-Objekte, die Klassen und internierten Zeichenfolgen zugeordnet sind. In der Client-Implementierung von Sun mit aktivierter Freigabe
classes.jsa
wird der Speicher so zugeordnet, dass er die Anfangsdaten bildet, wobei etwa die Hälfte schreibgeschützt und die Hälfte schreibgeschützt ist.Nur alte Java-Objekte werden in der Tenured Generation gespeichert.
quelle
PermGen wird von der JVM verwendet, um geladene Klassen zu speichern. Sie können es erhöhen mit:
-XX:MaxPermSize=384m
Wenn Sie Sun JVM oder OpenJDK verwenden.
Wenn Sie also eine OutOfMemoryException: PermGen erhalten, müssen Sie entweder PermGen vergrößern, oder Sie haben möglicherweise Probleme mit dem Klassenladeprogramm.
quelle
Permanente Generation. Weitere Informationen zum Garbage Collector finden Sie im Java GC-Optimierungshandbuch .
quelle
Nicht wirklich mit der ursprünglichen Frage verwandt, aber möglicherweise wird es jemand nützlich finden. PermGen ist in der Tat ein Bereich im Speicher, in dem Java seine Klassen beibehalten hat. So sind viele von uns in PermGen auf OOM gestoßen, wenn es zum Beispiel viele Klassen gab.
Seit Java 8 wurde der PermGen-Bereich durch den MetaSpace-Bereich ersetzt, der effizienter und standardmäßig unbegrenzt ist (oder genauer gesagt - begrenzt durch die Menge des nativen Speichers, abhängig von der Verfügbarkeit von 32- oder 64-Bit-JVM und dem virtuellen Speicher des Betriebssystems). Es ist jedoch möglich, es auf einige Arten abzustimmen, indem beispielsweise eine maximale Grenze für den Bereich angegeben wird. Weitere nützliche Informationen finden Sie in diesem Blogbeitrag .
quelle
PermGen steht für Permanent Generation .
Hier ist ein kurzer Klappentext zu DDJ
quelle
Ständige Generation
quelle
Wenn ich mich richtig erinnere, steht das Gen für Generation, wie in einem Generationsmüllsammler (der jüngere Objekte anders behandelt als Mid-Life- und "permanente" Objekte). Das Prinzip der Lokalität legt nahe, dass kürzlich erstellte Objekte zuerst gelöscht werden.
quelle
Permgen steht für Permanent Generation. Es ist einer der JVM-Speicherbereiche. Es ist Teil von Heap mit fester Größe, indem ein Flag namens MaxPermSize verwendet wird.
Warum der Name "PermGen"?
Dieses Permgen wurde in den frühen Tagen von Java benannt. Das Permgen-Netz speichert alle Metadaten geladener Klassen. Das Problem ist jedoch, dass eine geladene Klasse bis zum Herunterfahren der JVM in der JVM verbleibt. Der Name Permgen ist also dafür entschieden. Später kam das dynamische Laden von Klassen ins Spiel, aber der Name wurde nicht geändert. Aber mit Java 8 haben sie auch dieses Problem behoben. Jetzt wurde Permagen in MetaSpace mit dynamischer Speichergröße umbenannt.
quelle