Permgen vs Metaspace in Java

Permgen gegen Metaspace in Java

1. Einführung

In diesem kurzen Tutorial wirdwe’re going to examine the differences between the PermGen and Metaspace memory regionsin der Java-Umgebung angezeigt.

Es ist wichtig zu beachten, dass der Metaspace ab Java 8 das PermGen ersetzt und einige wesentliche Änderungen mit sich bringt.

2. PermGen

PermGen (Permanent Generation) is a special heap space separated from the main memory heap.

Die JVM verfolgt die geladenen Klassenmetadaten im PermGen. Darüber hinaus speichert die JVM den gesamten statischen Inhalt in diesem Speicherabschnitt. Dies umfasst alle statischen Methoden, primitiven Variablen und Verweise auf die statischen Objekte.

Weiterhinit contains data about bytecode, names and JIT information. Vor Java 7 war der String Pool ebenfalls Teil dieses Speichers. Die Nachteile der festen Poolgröße sind inwrite-upangegeben.

Die maximale Standardspeichergröße für 32-Bit-JVM beträgt 64 MB und für die 64-Bit-Version 82 MB.

Wir können jedoch die Standardgröße mit den JVM-Optionen ändern:

  • -XX:PermSize=[size] ist die anfängliche oder minimale Größe des PermGen-Bereichs

  • -XX:MaxPermSize=[size] ist die maximale Größe

Vor allem hat Oracle diesen Speicherplatz in JDK 8 vollständig entfernt.

With its limited memory size, PermGen is involved in generating the famous OutOfMemoryError. Einfach ausgedrückt, dieclass loaders werden nicht ordnungsgemäß gesammelt und haben infolgedessen einen Speicherverlust verursacht.

Daher erhalten wir einmemory space error; Dies geschieht hauptsächlich in Entwicklungsumgebungen beim Erstellen neuer Klassenlader.

3. Metaspace

Einfach ausgedrückt ist Metaspace ein neuer Speicherplatz - ab der Java 8-Version. it has replaced the older PermGen memory space. Der wichtigste Unterschied besteht darin, wie mit der Speicherzuweisung umgegangen wird.

Infolgedessen istthis native memory region grows automatically by default. Hier haben wir auch neue Flags, um den Speicher zu optimieren:

  • MetaspaceSize undMaxMetaspaceSize – können wir die Metaspace-Obergrenzen festlegen.

  • MinMetaspaceFreeRatio – ist der Mindestprozentsatz der nachgarbage collection freien Kapazität von Klassenmetadaten

  • MaxMetaspaceFreeRatio – ist der maximale Prozentsatz der Kapazität von Klassenmetadaten, die nach einer Speicherbereinigung frei ist, um eine Reduzierung des Speicherplatzes zu vermeiden

Darüber hinaus profitiert der Garbage Collection-Prozess von dieser Änderung. Der Garbage Collector löst jetzt automatisch die Bereinigung der toten Klassen aus, sobald die Verwendung der Klassenmetadaten ihre maximale Metaspace-Größe erreicht.

Daher istwith this improvement, JVM reduces the chance to get the OutOfMemory error.

Trotz all dieser Verbesserungen müssen wir den Metaspace weiterhin überwachen undtune up, um Speicherlecks zu vermeiden.

4. Zusammenfassung

Diese kurze Beschreibung enthält eine kurze Beschreibung der Speicherbereiche PermGen und Metaspace. Darüber hinaus haben wir die wichtigsten Unterschiede zwischen den beiden erläutert.

PermGen gibt es noch mit JDK 7 und älteren Versionen, aber Metaspace bietet eine flexiblere und zuverlässigere Speichernutzung für unsere Anwendungen.