Herhangi bir yaklaşım size kabaca aynı sayı vermelidir. -X..m
-X..x
Tüm nesiller için öbek ayırmak her zaman iyi bir fikirdir . Daha sonra hangi parametrelerin geçildiğini ve dolayısıyla kullanıldığını görmek için ps'yi garanti edebilir ve yapabilirsiniz.
Gerçek bellek kullanımları için, VIRT (ayrılmış ve paylaşılan) ve RES (gerçek kullanılan) karşılaştırmasını jstat değerleriyle de karşılaştırabilirsiniz:
Java 8 için, aslında bu değerler için jstat'a bakın . Mmap veya dosya işleme olmadan basit bir sınıf çalıştırdığınız varsayılarak.
$ 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
Maksimum :
NGCMX + S0C + S1C + EC + OGCMX + MCMX + CCSMX
3433472 + 512 + 512 + 67072 + 6867968 + 1083392 + 1048576 = 12 GB
(kabaca VIRT belleğe yakın ve aşağıda)
Maks (Min, Kullanılmış):
215040 + 512 + 512 + 67072 + 430080 + 39680 + 4864 = ~ 1GB
(kabaca RES belleğine yakın)
"Bana bu konuda alıntı yapma" ama VIRT mem kabaca ayrılan Max belleğe yakın veya daha fazladır, ancak kullanılan bellek fiziksel bellekte boş / kullanılabilir olduğu sürece , JVM bellek istisnası atmaz. Aslında, maksimum bellek, OS'de takas olsa bile JVM başlangıcında fiziksel belleğe karşı kontrol edilmez. Java işlemi tarafından gerçekten kullanılan Sanal belleğin daha iyi bir açıklaması burada ele alınmıştır .
jstat
JVM'nin sadece genel bellek kullanımını doğrulamak için hangi seçeneklerin kullanılması gerektiğine dair bir tavsiye var mı ? Diyelim ki JVM'yi başlattınızXms=4g
veXmx=4g
görmek istiyorsunuz, bunun ne kadar hafızası kullanılıyor?