W Eclipsie podałem następujące parametry JVM:
-Xmx1000m
-Xms1000m
-XX:PermSize=24m
-XX:MaxPermSize=24m
-Xss10m
-verbose:gc
-XX:+PrintGCDetails
-XX:CMSInitiatingOccupancyFraction=65
-Dsun.rmi.dgc.client.gcInterval=60000
W aplikacji odczytuję:
rt = Runtime.getRuntime();
rt.maxMemory()/1024/1024;
I zastanawia mnie dlaczego (uzyskana w MB) wartość pamięci jest różna od żądanej parametrem Xmx. Akurat dla (Xmx=1000, PermSize=MaxPermSize=24, Xss=10 ) otrzymuje 966MB. Generalnie zawsze podawana metodą maxMemory() wartość jest o około 3,5% mniejsza niż by wynikało to z Xmx (bez względu na wartości pozostałych parametrów JVM).
Pytania mam takie:
- skąd bierze się ta różnica (jak nad nią panować)?
- jak wyodrębniana jest pamięć przeznaczona na stos, jeśli jest ona przedstawiona tak jak znalazłem w necie - plik załącznika.
P.S. skoro Xms=Xmx to można na coś jeszcze zostawiać pamięć co tłumaczyło by to około 3,5% o które się targuje?
- slide2.jpg (35 KB) - ściągnięć: 258