Was ist Dauerwellenraum?

87

Während ich etwas über Java Memory Profiling lerne, sehe ich neben "Heap" immer wieder den Begriff "Perm Space". Ich weiß, was der Haufen ist - was ist Dauerwellenraum?

Skiphoppy
quelle
13
Java 8 hat dieses Konzept vollständig entfernt und ist in Metaspace umgezogen
pramodc84
2
Referenz hier gut erklärt youtube.com/watch?v=PUUJ4rNpRhU
shareef

Antworten:

103

Es steht für permanente Generation :

Die permanente Generierung ist etwas Besonderes, da sie Metadaten enthält, die Benutzerklassen beschreiben (Klassen, die nicht Teil der Java-Sprache sind). Beispiele für solche Metadaten sind Objekte, die Klassen und Methoden beschreiben, und sie werden in der permanenten Generation gespeichert. Anwendungen mit großer Codebasis können dieses Segment des java.lang.OutOfMemoryErrorHeapspeichers schnell füllen, was Folgendes verursacht : PermGen, egal wie hoch Ihre -Xmx und wie viel Speicher Sie auf dem Computer haben.

Andrew Hare
quelle
Andrew, ich bin nur neugierig zu wissen, wie groß PerGen sein könnte.
gks
Nur neugierig, ob Permgen ein Teil des Heapspeichers ist (wie in dieser Antwort angegeben) oder außerhalb des Heapspeichers liegt (wie in dieser Antwort angegeben - stackoverflow.com/a/31103100/3061686 ).
Akki
25

Perm spacewird verwendet, um Informationen für geladene Klassen und einige andere erweiterte Funktionen wie String Pool(für hochoptimierte String-Gleichheitstests) zu speichern, die normalerweise von String.intern()Methoden erstellt werden. Da Ihre Anwendung (Anzahl der Klassen) wächst, wird dieser Speicherplatz schnell gefüllt, da die Speicherbereinigung in diesem Speicherplatz nicht sehr effektiv ist, um nach Bedarf zu bereinigen, kommt es schnell zu einem Speicherfehler. Danach darf keine Anwendung auf diesem Computer effektiv ausgeführt werden, selbst wenn eine große leere JVM vorhanden ist.

Bevor Sie Ihre Anwendung starten, sollten Sie java -XX:MaxPermSizediesen Fehler beseitigen.

DKSRathore
quelle
Der String-Pool wird seit Java 7 in den Heap-Bereich verschoben.
Caffeine Coder
20

Einfache (und stark vereinfachte) Antwort: Hier speichert der JVM seine eigenen Buchhaltungsdaten im Gegensatz zu Ihren Daten.

Matt
quelle
17

Perm Gen steht für permanente Generierung, die die Metadateninformationen zu den Klassen enthält.

  1. Angenommen, wenn Sie einen Klassennamen A erstellen, wird seine Instanzvariable im Heapspeicher gespeichert, und Klasse A wird zusammen mit statischen Klassenladeprogrammen in der permanenten Generierung gespeichert.
  2. Garbage Collectors werden es schwierig finden, den im permanenten Generationsspeicher gespeicherten Speicherplatz zu löschen oder freizugeben. Daher wird immer empfohlen, die Permgen-Speichereinstellungen auf dem empfohlenen Grenzwert zu halten.
  3. JAVA8 hat das Konzept der Meta-Space-Generierung eingeführt. Daher wird Permgen nicht mehr benötigt, wenn Sie JDK 1.8-Versionen verwenden.
Praveen Kumar KS
quelle
5

Der Permgen-Raum ist der Heap-Bereich, der alle reflektierenden Daten der virtuellen Maschine selbst enthält, z. B. Klassen- und Methodenobjekte.

Jesse
quelle
3

Es enthält Dinge wie Klassendefinitionen, String-Pool usw. Ich denke, man könnte es Metadaten nennen.

Nick
quelle
3

Der Permgen-Bereich wird immer als Methodenbereich bezeichnet. Wenn das Classloader-Subsystem die Klassendatei (Bytecode) in den Methodenbereich (PermGen) lädt. Es enthält alle Klassenmetadaten, z. B.: Vollqualifizierter Name Ihrer Klasse, Vollqualifizierter Name der unmittelbaren übergeordneten Klasse, Variableninformationen, Konstruktorinformationen, konstante Poolinformationen usw.

Amruta
quelle
2

Was unter PremGen existiert: Der Klassenbereich fällt unter den PremGen-Bereich. Statische Felder werden auch zum Zeitpunkt des Ladens der Klasse entwickelt, sodass sie auch in PremGen vorhanden sind. Der konstante Poolbereich mit allen unveränderlichen Feldern, die wie String zusammengefasst sind, wird hier beibehalten. Darüber hinaus befinden sich auch Klassendaten, die von Klassenladeprogrammen, Objektarrays und internen Objekten geladen werden, die von jvm verwendet werden.

hi.nitish
quelle
1

PermGen Space steht für Speicherzuweisung für die permanente Generierung. Alle unveränderlichen Java-Objekte fallen unter diese Kategorie, wie Stringsie mit Literalen oder String.intern()Methoden erstellt werden, und zum Laden der Klassen in den Speicher. PermGen Space beschleunigt unsere Suche nach String-Gleichheit.

Spark-Anfänger
quelle
1
  • JVM verfügt über eine interne Darstellung von Java-Objekten, und diese internen Darstellungen werden im Heap gespeichert (in der jungen Generation oder in der festen Generation).
  • JVM verfügt auch über eine interne Darstellung der Java-Klassen, die in der permanenten Generation gespeichert sind

Geben Sie hier die Bildbeschreibung ein

user2815984
quelle