2010-11-19 4 views
11

Angenommen, ich meine Java-VM mit den folgenden Parametern starten:Ist Java PermGen Space Teil des gesamten VM-Speichers?

-Xms1024m -Xmx1024m -XX:PermSize=512m -XX:MaxPermSize=512m 

Haben die 512m PermGen Raum hinzufügen zum 1024m Speicher oder sind sie Teil davon? Oder mit anderen Worten, habe ich einen Gesamtspeicherverbrauch von 1536m oder 1024m? Bedeutet das im zweiten Fall, dass die Anwendung nur 512m für andere Zwecke als PermGen-Speicherplatz hat?

Bitte lassen Sie mich wissen, wenn diese Frage einen Mangel an Verständnis PermGen Raum zeigt. ;-)

+0

Warum probierst du es nicht aus? Sollte sofort in top/der Task-Manager sichtbar sein. –

+0

mögliches Duplikat von [Ist permgen in -Xmx enthalten?] (Http://stackoverflow.com/questions/4084280/is-permgen-included-in-xmx) –

Antwort

15

Die -Xms und -Xmx Parameter beziehen sich auf heap Speicher, wohingegen der PermGen Raum ein separater Speicherpool ist.

Mit anderen Worten, die Gesamtspeichergröße, die für Ihre Java-Anwendung verfügbar ist, beträgt 1,5 GiB anstatt 1 GiB, und Sie erhalten den vollen Gigabyte Speicherplatz für Heap-allokierte Objekte.

0

In Sun JVM ist die permanente Generation nicht Teil des Heaps. Es ist ein anderer Platz für Klassendefinitionen und zugehörige Daten sowie für den Fall, dass interne Strings leben.

1

Ich bin gerade auf diese Seite durch Google gestoßen. Dies ist eine gewisse Verwirrung, ob PerGen Teil von Heap ist oder nicht: Die Antwort lautet: "Heap wird in kleinere Teile/Generationen zerlegt und diese Teile sind: Junge Generation, alte oder zähe Generation und permanente Generation". Das sagt Oracle, um es gelinde auszudrücken. Es ist viel sinnvoller, nach dem Absender zu suchen, als nach dem Publikum auf der Web-Domain.

Ein kurzer Hinweis auf PermGen: Permanent Generation enthält Metadaten, die von der JVM erforderlich, um die Klassen und Methoden in der Anwendung verwendet zu beschreiben. Die permanente Generierung wird von der JVM zur Laufzeit basierend auf Klassen gefüllt, die von der Anwendung verwendet werden. Darüber hinaus können Java SE-Bibliotheksklassen und -methoden hier gespeichert werden.