Wywóz śmieci JVM w młodym pokoleniu

Proszę o poprawienie mnie, jeśli się mylę. W JVM heap istnieją dwa pokolenia, stare i Młode. Podczas wykonywania pełnego GC, w starej generacji, istnieją ciężkie operacje, takie jak kompaktowe przestrzenie i mocowanie otworu, które sprawią, że JVM zawiśnie. A ja uważam, że w młodym pokoleniu stosuje się lekki ważony GC, a z moich wyników wyszukiwania wynika inny obszar o nazwie Eden związany z młodym pokoleniem. Jednak po przeszukaniu wielu dokumentów, nadal mam dwa nieporozumienia na temat GC w young generation,

  1. w młodym pokoleniu wydaje się, że GC nie działa w sposób, w jaki stara generacja GC działa (tzn. stara generacja GC kompaktuje i naprawia dziurę)? Jeśli tak, to jak działa GC w młodym pokoleniu?
  2. Czym jest Eden space i jak ta przestrzeń jest wykorzystywana w młodym pokoleniu? Doceniamy, jeśli można polecić jakiś dokument dla nowicjusza.
Author: Prince John Wesley, 2012-12-01

1 answers

To jest jeden, najważniejszy diagram, który musisz zapamiętać i zrozumieć:

Układ pamięci Java http://www.oracle.com/ocom/groups/public/@otn/documents/digitalasset/190244.gif

Pochodzi z Java SE 6 HotSpot [tm] Virtual Machine Garbage Collection Tuning, miejsca, w którym można dowiedzieć się wszystkiego o GC. Ale aby odpowiedzieć na twoje natychmiastowe pytania:

Przydzielanie nowych obiektów za pomocą operatora new (prawie) zawsze dzieje się w Eden space. Ale Eden to stos. Kiedy tworzysz nowy obiekt wymagający N bajtów, pojedynczy wskaźnik przesuwa się o N bajtów na stosie i to wszystko. Przydzielanie jest szybkie, bez szukania wolnego miejsca, zagęszczania, cokolwiek.

Oczywiście ten stos nie jest nieskończony, w pewnym momencie osiągniemy jego koniec, uruchamiając małe GC. Również najprawdopodobniej wiele obiektów jest już śmieciami. Więc to, co robi JVM w minor GC, jest następujące:

  • Przestawianie wykresu obiektów począwszy od GC roots

  • Kopiowanie wszystkich obiektów osiągalnych z GC roots do jednej z przestrzeni survivor (brak luk, znamy je wszystkie i jest to jeden proces)

  • Wymazać przestrzeń eden (w zasadzie wystarczy przenieść ten wskaźnik stosu z powrotem do 0)

W kolejnych mniejszych kolekcjach istnieją dodatkowe kroki:

    Zbadano również jedną z przestrzeni ocalałych. Żywe obiekty zarówno z Edenu, jak i z jednej z ocalałych przestrzeni są kopiowane do drugiej miejsce. Oznacza to, że zawsze jest dokładnie jedna wolna przestrzeń ocalałego.

Więc jak przedmioty kończą się w pokoleniu? Pierwsze młode obiekty są kopiowane do jednego z ocalałych pomieszczeń. Następnie są kopiowane do drugiego i znowu i znowu. Gdy dany obiekt przeskakuje zbyt wiele razy w przód i w tył (konfigurowalny, domyślnie 8), jest promowany do miejsca stałego.

Major GC działa, gdy przestrzeń jest pełna.

 28
Author: Tomasz Nurkiewicz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:11