it-swarm.com.de

PermGen-Eliminierung in JDK 8

Ich habe JDK 8 installiert und versucht, Eclipse auszuführen. Ich erhalte folgende Warnmeldung:

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m;
support was removed in 8.0 

Was sind die Gründe, warum diese VM Option ignoriert wird?

212
Shamim Ahmmed

Gründe für das Ignorieren dieses Arguments sind, dass die permanente Generierung in HotSpot für JDK8 aufgrund der folgenden Nachteile entfernt wurde

  • Feste Größe beim Start - schwer abzustimmen.
  • Interne Hotspot-Typen waren Java Objekte: Konnte mit vollem GC verschoben werden, undurchsichtig, nicht stark typisiert und schwer zu debuggen, benötigte Meta-Metadaten.
  • Vereinfachen Sie vollständige Sammlungen: Spezielle Iteratoren für Metadaten für jeden Kollektor
  • Möchten Sie die Zuordnung von Klassendaten gleichzeitig aufheben und nicht während der GC-Pause
  • Aktivieren Sie zukünftige Verbesserungen, die von PermGen eingeschränkt wurden.

Der PermGen-Bereich (Permanent Generation) wurde vollständig entfernt und durch einen neuen Bereich namens Metaspace ersetzt. Die Konsequenzen der PermGen-Entfernung sind, dass offensichtlich die PermSize- und MaxPermSize-JVM-Argumente ignoriert werden und Sie werden niemals eine bekommen Java.lang.OutOfMemoryError: PermGen-Fehler.

Vorteile von MetaSpace

  • Nutzen Sie die Java Sprachspezifikationseigenschaft: Klassen und zugehörige Lebensdauern von Metadaten stimmen mit denen des Klassenladeprogramms überein
  • Pro Lader-Speicherbereich - Metaspace
  • Nur lineare Zuordnung
  • Keine individuelle Reklamation (außer RedefineClasses und Fehler beim Laden von Klassen)
  • Kein GC-Scan oder Verdichtung
  • Keine Verlagerung für Metaspace-Objekte

Metaspace Tuning

Die maximale Metaspace-Größe kann mit dem Flag -XX: MaxMetaspaceSize festgelegt werden. Der Standardwert ist unbegrenzt. Dies bedeutet, dass nur der Systemspeicher die Obergrenze darstellt. Das Optimierungsflag -XX: MetaspaceSize definiert die anfängliche Größe von Metaspace. Wenn Sie dieses Flag nicht angeben, wird die Größe des Metaspace abhängig von der Anwendungsanforderung zur Laufzeit dynamisch angepasst.

Änderungen ermöglichen in Zukunft weitere Optimierungen und Funktionen

  • Datenaustausch in der Anwendungsklasse
  • Optimierungen für junge Sammlungen, Entladen der Klasse G1
  • Reduzierung der Metadatengröße und interne JVM-Footprint-Projekte

Es gibt auch eine verbesserte GC-Leistung. Weitere Einzelheiten

335
pardeep131085

Dies ist eine der neuen Funktionen von Java 8, Teil von JDK Enhancement Proposals 122 :

Entfernen Sie die permanente Generation aus der Hotspot-JVM, sodass die Größe der permanenten Generation angepasst werden muss.

Die Liste aller JEPs, die in Java 8 enthalten sein werden, finden Sie auf der Seite JDK8-Meilensteine .

113
assylias

Der PermGen-Bereich (Permanent Generation) wurde vollständig entfernt und wird durch einen neuen Bereich namens Metaspace ersetzt. Die Folgen der PermGen-Entfernung sind, dass die JVM-Argumente PermSize und MaxPermSize offensichtlich ignoriert werden und Sie niemals ein Java.lang.OutOfMemoryError: PermGen-Fehler. Die JDK 8-HotSpot-JVM verwendet jetzt den nativen Speicher für die Darstellung von Klassenmetadaten und heißt Metaspace. Weitere Informationen >>

18
Dhrumil Shah

Weil der PermGen-Raum entfernt wurde. Die Speicherverwaltung hat sich etwas geändert.

http://Java.dzone.com/articles/Java-8-permgen-metaspace

15
Sebastian Redl

Der PermGen-Bereich wird in Java) durch MetaSpace ersetzt. 8. Die JVM-Argumente PermSize und MaxPermSize werden ignoriert und eine Warnung wird ausgegeben, wenn sie beim Start vorhanden ist.

Die meisten Zuweisungen für die Klassenmetadaten werden jetzt aus dem nativen Speicher zugewiesen. * Die Klassen, die zur Beschreibung von Klassenmetadaten verwendet wurden, wurden entfernt.

Der Hauptunterschied zwischen dem alten PermGen und dem neuen MetaSpace besteht darin, dass Sie keine Obergrenze für die Speichernutzung festlegen müssen. Sie können das Platzlimit für MetaSpace unbegrenzt lassen. Wenn daher die Speichernutzung zunimmt, wird der OutOfMemoryError-Fehler nicht angezeigt. Stattdessen wird der reservierte native Speicher vergrößert, um die Speichererweiterung vollständig auszufüllen.

Sie können die maximale Speicherplatzbeschränkung für MetaSpace definieren. Anschließend wird OutOfMemoryError: Metadata-Speicherplatz ausgelöst. Daher ist es wichtig, diese Grenze vorsichtig zu definieren, um Speicherverschwendung zu vermeiden.

11
Shubham Pandey

Die JVM-Implementierung von Oracle für Java 8 hat das PermGen-Modell entfernt und durch Metaspace ersetzt.

8
chrylis