Narzędzia użytkownika

Narzędzia witryny


java_-_zarzadzanie_pamiecia

To jest stara wersja strony!


Java - zarządzanie pamięcią

W tej sekcji wyjaśniamy jak Java zarządza pamięcią. Pozwoli to zrozumieć zasady i mechanizmy alokowania i zwalniania pamięci przez JVM.

Rodzaje pamięci

Java (JVM) korzysta z kilku rodzajów pamięci, gdzie m.in. przechowuje kod programu, obiekty Permament Generations oraz sterta na zwykłe obiekty. Sprawdzając użycie pamięci na serwerze poleceniem typu /mem zawsze sprawdza się ilość wolnej pamięci w obszarze sterty (heap) dla zwykłych obiektów, a nie całość przydzielonej pamięci dla procesu Java.

Alokowanie i zwalnianie pamięci

Java wykorzystuje Garbage Collector - specjalny mechanizm „odśmiecania pamięci”, ponieważ w odróżnieniu do innych języków programowania takich jak C/C++, programista nie musi dealokować / niszczyć obiektów po ich wykorzystaniu. Zamiast tego, specjalny program wykonuje tą żmudną pracę za niego.

Ma to swoje konsekwencje w wydajności. Podczas sprzątania śmieci, cały proces Java musi być na moment wstrzymany, czyli przez ułamek sekundy serwer nie pracuje. Dodatkowo, wymagane są zasoby CPU na wykonanie tej operacji - a obiektów do zniszczenia są miliony. Dlatego Java uruchamia proces sprzątania bardzo rzadko - zwykle, gdy brakuje już pamięci.

Im więcej RAM, tym większe zużycie

Jak to zostało już wspomniane, Java zwalnia pamięć gdy jej potrzebuje w innym miejscu. Często zdarza się tak, że im więcej RAM serwer ma przypisane, tym większe jego zużycie. Np. dla serwera 1500MB RAM po starcie zużycie wynosi ok 100MB, gdy dla serwera 8000MB po starcie nierzadko widać 3000MB. Dlaczego? Java nie usuwa z pamięci śmieci, gdy pamięci jest pod dostatkiem.

Objawy zwalniania i braku pamięci

Często bardzo łatwo zauważyć moment zwalniania pamięci przez Javę. Na serwerach z małą ilością pamięci RAM, Java uruchamia często Garbage Collector, co objawia się lagowaniem. To jest pierwszy objaw braku pamięci. Oczywiście gdy Java nie wyrabia się w limicie pamięci, zaczyna go przekraczać, wtedy proces Java (serwer) zostaje nagle zatrzymany przez brak pamięci. Zwyczajnie się crash'uje.

Więcej informacji o modelu pamięci Java

java_-_zarzadzanie_pamiecia.1499855427.txt.gz · ostatnio zmienione: 2017/07/12 12:30 przez marcinc