2012-06-13 10 views
13

Freunde,PermGen und Heap, Differenz und ihre Bedeutung

Können Sie bitte geben Sie mir Bedeutung, Differenz und verwendet für Heap und PermGen. Auch wäre es gut zu wissen, welche Klasse in ihnen jeweils geladen sind.

Erklärung zu Java VM-Spezifikation im Zusammenhang würde

Dank Punith

+0

Beziehen Sie sich auf diese verwandte Frage: http://stackoverflow.com/questions/2070791/young-tenured-and-perm-generation/33994430#33994430 –

Antwort

21

Speicher (Heap) wird in Generationen verwaltet, oder Speicherpools, die Objekte unterschiedlichen Alters enthalten. Die Garbage Collection erfolgt in jeder Generation, wenn die Generierung voll ist. Objekte werden in einer Generation für jüngere Objekte oder die young generation zugeordnet, und wegen der Säuglingssterblichkeit sterben dort die meisten Objekte.

Wenn ein neues Objekt erstellt wird, geht es in den Eden-Bereich, der ein Teil von Young Generation ist.

Wenn Objekt nach einiger Zeit noch am Leben ist, geht es zu tenured generation, wo langlebige Objekte liegen.

Wenn das Objekt so lange leben soll, bis ein Überprozess existiert, wird das Objekt in Perm Generation verschoben. Java classes sind in der permanenten Generation gespeichert.

0

Nun, ich bin kein Experte, aber die PermGem Speicher befindet sich im Heap, da es wie ein besonderer Ort ist, wo alle Klassen zur Laufzeit geladen werden. Wenn Sie also zu viele Klassen haben, löst das PermGem eine OutOfMemoryException aus. Und nun speichert der Heap die Objekte, die Sie in Ihrem Java-Code einfügen, wo der GC die Objekte sammelt, auf die keine Variable in einem laufenden Thread im Stack verweist.

+2

Das ist nicht wahr. PerGen ist ein von Heap getrennter Speicher. prüfe (dies) [https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation] – Santosh

+0

yeah, du hast Recht. Ich bin mir nicht sicher, ob ich etwas anderes gelesen habe, aber es macht Sinn, da das, was sie mit der Trennung erreichen wollten, der GC nicht nach permanenten Daten sucht, also prüft er einfach den Haufen nach "Dingen", die er sammeln kann. –

0

Ich glaube, Permgen ist Speicherbereich nur im Heap-Speicher. Es ist für besondere Zwecke wie das Halten von String erstellt.

Das erstellte Objekt wird nicht mit Permgen Memory geladen. Es ist nur für spezielle Klassen wie String in JDK 6 oder niedriger.

In modernen JDK-Versionen wie 8 und höher wird Pergen nicht gefunden, aber neuer Speicher wie Non Heap und andere verschiedene Cache-Speicher werden eingeführt.