2017-01-04 58 views
14

Monitoruję JVM wykonawczy iskra wykonawczy wyjątku OutOfMemoryException. Użyłem Jconsole do połączenia z executorem JVM. Poniżej znajduje się zrzut JConsole: enter image description hereRóżnica w używanej, zatwierdzonej i maksymalnej pamięci stertowej

na obraz wybranej pamięci jest pokazany jako 3,8g i zaangażowana jest 8,6 g pamięć i pamięć Max jest również 8,6 g Czy ktoś może wyjaśnić różnicę między zużytym i zaangażowanych pamięci lub dowolny link co to wyjaśnia.

+5

https://docs.oracle.com/javase/7/docs/api/java/lang/management/MemoryUsage.html – stark

+3

Możliwy duplikat [Dlaczego raport JVM bardziej zaangażowana pamięć niż rezydent procesu linux ustawić rozmiar?] (http://stackoverflow.com/questions/31173374/why-does-a-jvm-report-more-committed-memory-than-the-linux-process-resident-set) – the8472

Odpowiedz

3

Z Java DOC MemoryUsage,

getUsed jest:

ilości pamięci używanej w bajtach

getCommitted()

Powoduje zwrócenie ilości pamięci w bajtach, która została zatwierdzona dla maszyny wirtualnej Java . Ta ilość pamięci jest gwarantowana dla maszyny wirtualnej Java .

getMax()

Zwraca maksymalną ilość pamięci w bajtach, które mogą być używane do zarządzania pamięcią. Ta metoda zwraca -1, jeśli maksymalny rozmiar pamięci jest niezdefiniowany.

Ta ilość pamięci nie jest dostępna dla zarządzania pamięcią , jeśli jest większa niż ilość pamięci zatwierdzonej. Maszyna wirtualna Java może nie przydzielić pamięci, nawet jeśli ilość użytej pamięci nie przekracza tego maksymalnego rozmiaru.