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?
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?
Antworten:
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.OutOfMemoryError
Heapspeichers schnell füllen, was Folgendes verursacht : PermGen, egal wie hoch Ihre -Xmx und wie viel Speicher Sie auf dem Computer haben.
Perm space
wird 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:MaxPermSize
diesen Fehler beseitigen.
Perm Gen steht für permanente Generierung, die die Metadateninformationen zu den Klassen enthält.
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.
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.
PermGen Space steht für Speicherzuweisung für die permanente Generierung. Alle unveränderlichen Java-Objekte fallen unter diese Kategorie, wie String
sie mit Literalen oder String.intern()
Methoden erstellt werden, und zum Laden der Klassen in den Speicher. PermGen Space beschleunigt unsere Suche nach String-Gleichheit.