2012-08-24 15 views
8

Moje pytanie brzmi jak tytuł, i mam pewną wiedzę wyszukując:Dlaczego JVM zużywa mniej pamięci niż podano -Xms?

  1. Linux ma pamięć współdzielona How to measure actual memory usage of an application or process?

  2. JVM zarezerwuje ilość pamięci setted w XMS What does the -Xms JVM mean in reference to heap memory?

Ale nadal nie wiem dlaczego niektórzy mogą zaoferować pomoc?

Oto mój test uruchamiany na Ubuntu12.04 (64bit) | JDK 1.7.0_04. i top pokazuje poniżej:

PID USER  PR NI VIRT RES  SHR S %CPU %MEM TIME+ COMMAND 
4067 brian  20 0 5316m **262m** 7496 S 0 3.3 0:00.30 java -**Xms4096m** -Xmx4096m Test 
4066 brian  20 0 3182m **256m** 7496 S 0 3.3 0:00.30 java -**Xms2048m** -Xmx2048m Test 
4065 brian  20 0 2114m **252m** 7492 S 0 3.2 0:00.30 java -**Xms1024m** -Xmx1024m Test 
4064 brian  20 0 1314m **76m** 7584 S 0 1.0 0:00.20 java -**Xms256m** -Xmx256m Test 
4063 brian  20 0 1180m **51m** 7608 S 0 0.7 0:00.21 java -**Xms128m** -Xmx128m Test 

Odpowiedz

5

Patrzysz na pamięci rezydenta - czyli fizycznej RAM spożywane. Aby uzyskać więcej informacji, patrz here.

Pamięć wirtualna jest pamięcią używaną przez aplikację, w tym pamięć zamienioną (na dysk). Zobaczysz, że istnieje bliska zgodność z pamięcią wirtualną i ustawieniami -Xms.

Aby uzyskać więcej informacji, zobacz this ServerFault answer.

+0

chciałem zapytać "po co zamieniam używaną, nawet gdy moja pamięć jest obfita". i dostałem odpowiedź z adresu URL, który podłączyłeś ... dziękuję! –

+0

Kiedy więc pamięć OZE rozwinie się xms? Mam postęp, który xms i xmx = 6g, a po nim bootstrap, RES to 4g, po dniu 5,9 g, ale kiedy zrzucam stertę, to tylko 3,9g. Czy jvm będzie nadal zużywał pamięć do Xms, gdy potrzebuje, nawet jeśli używane obiekty w pamięci nie potrzebują tak dużo? – Jaskey

3

Po uruchomieniu JVM rezerwuje maksymalny rozmiar sterty jako jeden ciągły blok pamięci wirtualnej podczas uruchamiania. Jednak tylko strony faktycznie używane stają się stronami rezydentnymi (rzeczywistą pamięcią główną).

Ustawienie minimalnego rozmiaru nie zmusza JVM do użycia takiej ilości pamięci, jeśli nie jest potrzebna. Zamiast tego nie trzeba wiele wysiłku, aby zredukować pamięć do tego momentu (nadal możesz zobaczyć niewielkie kolekcje) W większości aplikacji minimalny rozmiar jest osiągany niemal natychmiast, ale program "cześć świat" użyje tej samej pamięci bez względu na to, jak duży ustawisz minimalna wielkość.

+0

więc masz na myśli to, że jeśli ustawię xms = xmx = 6g, przez większość czasu gc nie zostanie wyzwolony nawet ja mam tylko 4g osiągalnych obiektów? – Jaskey

Powiązane problemy