it-swarm.com.de

Was ist "PermSize" in Java?

Ich habe das Dokument in Java Memory Management durchgesehen und bin dabei auf PermSize gestoßen, was ich nicht verstehen konnte. Das Dokument sagt, es speichert "JVM speichert seine Metadaten", aber ich konnte nicht genau verstehen, was mit Metadaten gemeint ist. Ich googelte und irgendwo, wo ich las, speichert es ein Wertobjekt (benutzerdefiniertes Objekt).

Welche Objekte werden dort gespeichert? Ein Beispiel mit einer Erklärung wäre toll.

64
Anand

Eine schnelle Definition der "permanenten Generation":

"Die permanente Generierung wird verwendet, um Reflektierende Daten von VM selbst Wie Klassenobjekte und Methodenobjekte . Zu halten. Diese reflektierenden Objekte werden Direkt in die permanente Generation, und es ist Größe unabhängig von den anderen Generationen. " [ref]

Mit anderen Worten, hier gehen Klassendefinitionen an (und dies erklärt, warum Sie möglicherweise die Meldung OutOfMemoryError: PermGen space erhalten, wenn eine Anwendung eine große Anzahl von Klassen lädt und/oder bei einer erneuten Bereitstellung).

Beachten Sie, dass PermSize zusätzlich zu dem -Xmx -Wert ist, den der Benutzer in den JVM-Optionen festgelegt hat. Mit MaxPermSize kann die JVM die PermSize jedoch um den angegebenen Betrag vergrößern. Anfangs, wenn VM geladen ist, ist die MaxPermSize immer noch der Standardwert (32 MB für -client und 64 MB für -server), nimmt diesen Betrag jedoch erst dann in Anspruch, wenn er benötigt wird. Wenn Sie jedoch BEIDE PermSize und MaxPermSize auf 256 MB setzen, werden Sie feststellen, dass der Gesamtspeicher zusätzlich zu der Einstellung -Xmx um 256 MB erhöht wurde.

105
Pascal Thivent

Dieser Blogbeitrag gibt eine nette Erklärung und einige Hintergründe. Grundsätzlich wird die "permanente Generierung" (deren Größe durch PermSize angegeben wird) zum Speichern von Dingen verwendet, für die die JVM Speicherplatz zuweisen muss, die jedoch (normalerweise) nicht als "permanent" (also "permanent") (+) gespeichert werden. Das bedeutet zum Beispiel geladene Klassen und statische Felder. 

Es gibt auch ein FAQ zur Müllsammlung direkt von Sun, das einige Fragen zur permanenten Generierung beantwortet. Zum Schluss noch ein Blogbeitrag mit vielen technischen Details.

(+) Tatsächlich werden Teile der permanenten Generierung Wille Gaschromatographiert, z.B. Klassenobjekte werden entfernt, wenn eine Klasse entladen wird. Das war jedoch ungewöhnlich, als die permanente Generation in die JVM eingeführt wurde, daher der Name.

23
sleske

Der Permament-Pool enthält alles, was nicht Ihre Anwendungsdaten ist, sondern eher Dinge, die für die VM erforderlich sind: Normalerweise enthält er interne Zeichenfolgen, den Byte-Code definierter Klassen, aber auch andere "nicht Ihre" Datenelemente.

9
ankon

spitze, um Ihre geladenen Klassendefinitionen und Metadaten zu speichern. Wenn ein großes Code-Base-Projekt geladen wird, führt die unzureichende Perm-Gengröße zu dem beliebten Java.Lang.OutOfMemoryError: PermGen.

0
Appesh