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, diese VM-Option zu ignorieren?
Antworten:
Gründe für das Ignorieren dieses Arguments sind, dass die permanente Generierung in HotSpot für JDK8 aufgrund der folgenden Nachteile entfernt wurde
Der PermGen-Bereich (Permanent Generation) wurde vollständig entfernt und durch einen neuen Bereich namens Metaspace ersetzt. Die Entfernung von PermGen hat zur Folge, dass die JVM-Argumente PermSize und MaxPermSize offensichtlich ignoriert werden und Sie niemals den Fehler java.lang.OutOfMemoryError: PermGen erhalten.
Vorteile von MetaSpace
Metaspace-Tuning
Die maximale Metaspace-Größe kann mit dem Flag -XX: MaxMetaspaceSize festgelegt werden. Der Standardwert ist unbegrenzt. Dies bedeutet, dass nur Ihr Systemspeicher das Limit 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 geändert.
Änderungen ermöglichen in Zukunft weitere Optimierungen und Funktionen
Es gibt auch eine verbesserte GC-Leistung. Mehr Details
quelle
Dies ist eine der neuen Funktionen von Java 8, Teil der JDK-Verbesserungsvorschläge 122 :
Die Liste aller JEPs, die in Java 8 enthalten sein werden, finden Sie auf der Seite mit den JDK8-Meilensteinen .
quelle
Der PermGen-Bereich (Permanent Generation) wurde vollständig entfernt und durch einen neuen Bereich namens Metaspace ersetzt. Die Konsequenz der PermGen-Entfernung ist, dass die JVM-Argumente PermSize und MaxPermSize offensichtlich ignoriert werden und Sie niemals den
java.lang.OutOfMemoryError
Fehler PermGen erhalten. Die JDK 8 HotSpot-JVM verwendet jetzt nativen Speicher für die Darstellung von Klassenmetadaten und heißt Metaspace. Lesen Sie mehr >>quelle
Weil der PermGen-Speicherplatz entfernt wurde. Die Speicherverwaltung hat sich etwas geändert.
Java-8-Permgen-Metaspace
quelle
Der PermGen-Speicherplatz wird in Java 8 durch MetaSpace ersetzt. Die JVM-Argumente PermSize und MaxPermSize werden ignoriert und eine Warnung wird ausgegeben, wenn sie beim Start vorhanden ist.
Die meisten Zuordnungen 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 altem PermGen und neuem MetaSpace besteht darin, dass Sie nicht zwingend die Obergrenze der Speichernutzung definieren müssen. Sie können das MetaSpace-Speicherplatzlimit unbegrenzt lassen. Wenn also die Speichernutzung zunimmt, wird kein OutOfMemoryError-Fehler angezeigt. Stattdessen wird der reservierte native Speicher erhöht, um die erhöhte Speichernutzung vollständig auszufüllen.
Sie können die maximale Speicherplatzbeschränkung für MetaSpace definieren. Anschließend wird OutOfMemoryError: Metadata Space ausgegeben. Daher ist es wichtig, diese Grenze vorsichtig zu definieren, um Speicherverschwendung zu vermeiden.
quelle
Die JVM-Implementierung von Oracle für Java 8 hat das PermGen-Modell entfernt und durch Metaspace ersetzt .
quelle