Jeder Ansatz sollte Ihnen ungefähr die gleiche Anzahl geben. Es ist immer eine gute Idee, den Heap -X..m
-X..x
für alle Generationen zuzuweisen . Sie können dann garantieren und auch ps ausführen, um zu sehen, welche Parameter übergeben wurden und daher verwendet werden.
Für die tatsächliche Speichernutzung können Sie VIRT (zugewiesen und gemeinsam genutzt) und RES (tatsächlich verwendet) grob mit den jstat-Werten vergleichen:
Für Java 8 siehe jstat, denn diese Werte bedeuten tatsächlich. Angenommen, Sie führen eine einfache Klasse ohne mmap- oder Dateiverarbeitung aus.
$ jstat -gccapacity 32277
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
215040.0 3433472.0 73728.0 512.0 512.0 67072.0 430080.0 6867968.0 392704.0 392704.0 0.0 1083392.0 39680.0 0.0 1048576.0 4864.0 7225 2
$ jstat -gcutil 32277
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
6.25 0.00 7.96 18.21 98.01 95.29 7228 30.859 2 0.173 31.032
Max :
NGCMX + S0C + S1C + EC + OGCMX + MCMX + CCSMX
3433472 + 512 + 512 + 67072 + 6867968 + 1083392 + 1048576 = 12 GB
(ungefähr in der Nähe und unterhalb des VIRT-Speichers)
Max (Min, Gebraucht):
215040 + 512 + 512 + 67072 + 430080 + 39680 + 4864 = ~ 1GB
(ungefähr in der Nähe des RES-Speichers)
"Zitiere mich nicht dazu", aber VIRT mem liegt ungefähr in der Nähe des zugewiesenen maximalen Speichers oder darüber, aber solange der verwendete Speicher im physischen Speicher frei / verfügbar ist, löst JVM keine Speicherausnahme aus. Tatsächlich wird der maximale Speicher beim JVM-Start nicht einmal mit dem physischen Speicher verglichen, selbst wenn das Betriebssystem ausgeschaltet ist. Eine bessere Erklärung dessen, was der virtuelle Speicher tatsächlich von einem Java-Prozess verwendet, wird hier erläutert .
jstat
sollten, um nur die Gesamtspeicherauslastung einer JVM zu überprüfen? Angenommen, Sie starten die JVM mitXms=4g
undXmx=4g
möchten sehen, wie viel Speicher davon bereits verwendet wird.