Java altes Gen wächst weiter - Hilfe bei der Interpretation der Java GC-Ausgabe

9

Ich arbeite an einer performancekritischen serverseitigen Java-Anwendung.

Sobald das System gestartet ist, erwarte ich, dass keine langlebigen Objekte erstellt werden - nur solche mit kurzen Leben (bis zu 10 Sekunden). Ich möchte daher die JVM so einstellen, dass die Alte Generation konstant ist, sobald das System gestartet ist.

Ich denke, dass ich Erfolg hatte, aber ich verstehe nicht warum (siehe unten).

Hier sind unsere Einstellungen:

-Xmx3000m -Xms3000m -verbose: gc -XX: + PrintGCTimeStamps -XX: + PrintGCDetails -XX: + UseConcMarkSweepGC -XX: SurvivorRatio = 5 -XX: TargetSurvivorRatio = 90 -XX: MaxTenuringThreshold = 31 -XX: + PrintTenuringDistribution - XX: NewSize = 1250m -XX: MaxNewSize = 1250m

Wir verwenden Oracles Java 1.6.

Ich bin wirklich verwirrt durch die Ausgabe des Flags "PrintTenuringDistribution". Ich sehe die Ausgabe so:

%Vor%

Da ich viele Objekte mit Alter = 15 habe und der Schwellenwert 16 ist, würde ich erwarten, dass jedes Objekt in einem GC entweder (a) in die Alte Generation befördert wird oder (b) Müll gesammelt wird.

Aber laut JConsole nimmt meine alte Generation nicht zu. Was passiert mit all diesen Objekten?

    
Phil Harvey 15.07.2011, 12:08
quelle

1 Antwort

1

Die Alter, die Sie haben, sind für Objekte im Überlebendenraum. Da Sie einen großen Eden-Raum haben, sind die meisten Objekte, die zum Überlebendenraum werden, relativ alt.

    
Peter Lawrey 15.07.2011 12:19
quelle

Tags und Links