Permanent Generation Heap Space und Metaspace

Sarwan Soomro 16 Februar 2024
  1. Permanent Generation Heap Space in Java
  2. Hauptmerkmale von PermGen in Java
  3. PermGen Vs Metaspace in Java
  4. Metaraum (Java 8)
  5. Zusammenfassung
Permanent Generation Heap Space und Metaspace

Diese kurze Demonstration von JVM-Speicherplätzen untersucht, wie die Java Virtual Machine die Speicherzuweisung für Benutzerdaten handhabt. Obwohl wir dieses Thema nicht mit Grafiken behandeln werden, ist es eher einfach, und wir glauben, dass unsere Erklärung ausreichen wird, um Ihre Klarheit zu schaffen.

Außerdem werden wir den PermGen mit dem Metaspace und beiden vergleichen. Dieser kurze Artikel enthält viele Informationen für Sie, also lesen Sie weiter, um mehr zu erfahren.

Permanent Generation Heap Space in Java

PermGen ist eine Kurzform von Heap Space für die permanente Generierung, der von Java Virtual Machine verwendet wird. Es ist der Raum, der alle Klassen, Methoden, Objekte, internalisierten Strings usw. einnimmt.

Für die meisten Anwendungen hat die permanente Generierung keine erkennbare Auswirkung auf die Garbage-Collector-Effizienz. Dennoch erstellen und laden einige Anwendungen dynamisch viele Klassen, z. B. JSPs.

Notiz
Die genannten Apps könnten eine größere permanente Generation erfordern, um die zusätzlichen Klassen aufzunehmen.

Wenn ein solcher Fall eintritt, können wir die Größe von MAX: PermGen über die Befehlszeile erhöhen. Befehl zum Erhöhen von MAX: PermGen Grösse: -XX:MaxPermSize=SIZE, -XX:PermSize=[size].

Aber eines gilt es hier zu beachten. Da Java diesen Speicherplatz in der Version 8 des Java Development Kit entfernt hat, werden wir mit diesen Warnungen konfrontiert, wenn wir diese Tuning-Flags in Java 8 oder höher verwenden.

>> java -XX:PermSize=100m -XX:MaxPermSize=200m -version
OpenJDK 64-Bit Server VM warning: Ignoring option PermSize; support was removed in 8.0
OpenJDK 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0

Hauptmerkmale von PermGen in Java

PG ist auch in der vollständigen Garbage Collection enthalten:

  1. Platz für Metadaten der JVM-Klasse.
  2. Die interne Darstellung von Java-Klassen in Hotspot.
  3. Informationen über die Klassenstruktur, Felder und Bezeichner.
  4. Informationen zur Methodenkompilierung und Bytecodes.
  5. Variablen
  6. Always-on-Pool und symbolische Auflösung.

Häufige Probleme mit PermGen:

  1. Begrenzter Speicher für MaxPermSize.
  2. Größere MaxPermSize verursachte Neustarts.
  3. Problem mit nicht genügend Arbeitsspeicher.
  4. Das Entladen der Klasse wurde aufgrund des Anwendungsbezugs ausgelöst.
  5. MaxPermSize (nur 64 MB bis 85 MB).

Neben diesen Themen gibt es noch andere, die Sie hier lesen sollten: 1, 2.

PermGen Vs Metaspace in Java

Seit Java 8 haben wir die Ersetzung von PermGen durch Metaspace gesehen. Leichte Unterschiede waren auch bei dieser Änderung vorherrschend.

Beispielsweise hat der Metaspace eine unbegrenzte maximale Standardgröße, während ersterer dies nicht tat. Wenn wir die offiziellen Dokumente lesen, erfahren wir, dass PermGen auf 32-Bit-JVMs standardmäßig eine maximale Größe von 64 MB hat.

Ebenso hat es 82 MB auf 64-Bit-JVMs in Java 7 und älteren Versionen. Aber seit jetzt wissen Sie, dass der Out-of-Memory-Fehler kein Problem mehr darstellt.

Müssen wir nicht stattdessen den Metaspace erforschen? Natürlich ja.

Metaraum (Java 8)

Bitte nehmen Sie es als Container, einen Ort, an dem die Java VM Ihren Speicher wie Klassen, Methoden, Variablen, Zeichenfolgen usw. enthält, da wir bereits die wichtigsten Unterschiede zwischen dem älteren Speicherbereich und diesem angegeben haben.

Lassen Sie uns also ohne Verzögerung herausfinden, was in Metaspace anders ist?

Die folgende Tabelle vergleicht und kontrastiert Metaspace und PermGen.

S.N Permanente Generation Metaraum
1 Der PermGen Space wurde in Java 8 eliminiert. Der neue Raum Metaspace ersetzte ihn, der mit Java 8 veröffentlicht wurde.
2 Es hatte immer eine konstante Speichergröße, wie der Name schon sagt. Dynamische Speicherzuweisung je nach Betriebssystem.
3 Ineffektiver Garbage Collector (GC). Effektive GC
Notiz
Der PermGen-Fehler Speichermangel ist seit seiner Ersetzung durch den Metaspace kein Problem mehr.

Wenn Sie jedoch mehr darüber erfahren möchten, lesen Sie bitte diesen Link: Virtual Machine Garbage Collection Tuning.

Zusammenfassung

Obwohl es sich um einen kurzen und auf den Punkt gebrachten Artikel handelte, haben wir eine kurze Charakterisierung der permanenten Generierungs- und Metaspace-Speicherplätze, der Rolle der Garbage Collectors und der Art und Weise, wie die JVM sie alle strukturiert, vorgestellt.

Außerdem haben wir jeweils mit Echtzeitbeispielen differenziert und hilfreiche Referenzen genannt. Kurz gesagt, die permanente Generation ist immer noch in JDK 7 und früheren Versionen vorhanden.

Der Metaspace hingegen bietet einen zuverlässigeren und flexibleren Speicherplatz für unsere Anwendungen.

Sarwan Soomro avatar Sarwan Soomro avatar

Sarwan Soomro is a freelance software engineer and an expert technical writer who loves writing and coding. He has 5 years of web development and 3 years of professional writing experience, and an MSs in computer science. In addition, he has numerous professional qualifications in the cloud, database, desktop, and online technologies. And has developed multi-technology programming guides for beginners and published many tech articles.

LinkedIn