Terminologia Java heap: Młode, Stare i trwałe pokolenia?

Staram się zrozumieć, jak koncepcje młodego, Stare i trwałe generacje w terminologii Java heap, a dokładniej interakcje między tymi trzema pokoleniami.

Moje pytania to:

    Czym jest młode pokolenie?
  • czym jest stare pokolenie?
  • czym jest trwałe pokolenie?
  • jak te trzy pokolenia oddziałują / odnoszą się do siebie?
Author: Ravindra babu, 2010-01-25

8 answers

To chyba zwykłe nieporozumienie. W JVM firmy Oracle generowanie stałe nie jest częścią sterty. Jest to oddzielna przestrzeń dla definicji klas i powiązanych danych. W Javie 6 i wcześniejszych, internowane ciągi były również przechowywane w permanent generation. W Javie 7 internowane ciągi są przechowywane w głównym obiekcie heap.

Oto dobry post na temat permanent generation .

Podobają mi się opisy podane dla każdej przestrzeni w poradniku Oracle na JConsole :

Dla HotSpot Java VM, pamięci baseny do seryjnej zbiórki śmieci są następujące.

  • przestrzeń Eden (sterta): Pula, z której początkowo przydzielana jest pamięć dla większości obiektów.
  • Survivor Space (sterta): basen zawierający obiekty, które przetrwały zbiórka śmieci w Edenie miejsce.
  • Tenured Generation (heap): Pula zawierająca obiekty, które istniały przez jakiś czas w "ryzykantach" miejsce.
  • permanent Generation (non-heap): the pool containing all the reflective dane samej maszyny wirtualnej, takich jak obiekty klasy i metody. Z Maszyny wirtualne Java, które używają udostępniania danych klasy, pokolenie to dzieli się na obszary tylko do odczytu i odczytu i zapisu.
  • Pamięć podręczna kodu (bez sterty): maszyna wirtualna Java HotSpot zawiera również pamięć podręczną kodu, zawierające pamięć, która jest używana do kompilacja i przechowywanie natywnych kod.

Java wykorzystuje generatywne wywóz śmieci. Oznacza to, że jeśli masz obiekt foo (który jest instancją jakiejś klasy), im więcej zdarzeń usuwa śmieci (jeśli nadal są do niego odniesienia), tym dalej jest promowany. Zaczyna się w młodym pokoleniu (które samo w sobie jest podzielone na wiele przestrzeni-Eden i Survivor) i ostatecznie skończy w pokoleniu teneded, jeśli przeżyje wystarczająco długo.

 265
Author: Joshua McKinnon,
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
2013-09-23 19:54:06

Sterta dzieli się na pokolenia Młode i stare w następujący sposób:

Młode pokolenie : jest to miejsce, w którym żył przez krótki okres i podzielone na dwie przestrzenie:

  • Eden Space : gdy obiekt utworzony przy użyciu nowego słowa kluczowego pamięć przydzielona na tej przestrzeni.
  • Survivor Space : jest to Pula, która zawiera obiekty, które mają / align = "left" /

Old Generation : Ta pula jest w zasadzie zawiera stałe i wirtualne (zarezerwowanej) przestrzeni i będzie trzymać te przedmioty, które przetrwały po zbiórce śmieci z młodego pokolenia.

  • Tenured Space: ta pula pamięci zawiera obiekty, które przetrwały po wielokrotnym garbage collection czyli obiekty, które przetrwały po garbage collection z Survivor space.

Permanent Generation: ta pula pamięci, jak sama nazwa mówi, zawiera stałe metadane klas i deskryptory informacji więc PermGen przestrzeni zawsze zarezerwowane dla klas i tych, które są związane z klasami na przykład statycznych członków.

Aktualizacja Java8: PermGen zastępuje się Metaspace , który jest bardzo podobny.
Główną różnicą jest to, że Metaspace zmienia dynamiczne rozmiary, tzn. może się rozszerzać w czasie wykonywania.
Java Metaspace space: unbounded (default)

Pamięć podręczna kodu (wirtualna lub zarezerwowana): jeśli używasz HotSpot Java VM obejmuje to obszar pamięci podręcznej kodu, który zawiera pamięć, która będzie używana do kompilacji i przechowywania kodu natywnego.

Tutaj wpisz opis obrazka

Uprzejmość

 153
Author: Premraj,
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
2016-06-02 23:42:26
Czym jest młode pokolenie?

młode pokolenie to miejsce, w którym wszystkie nowe obiekty są przydzielane i starzeją się. Gdy młode pokolenie zapełnia się, powoduje to niewielki wywóz śmieci. Młode pokolenie pełne martwych przedmiotów zbiera się bardzo szybko. Niektóre ocalałe przedmioty są w wieku i ostatecznie przenieść do starego pokolenia.

Czym jest stare pokolenie?

The Old Generation jest używany do przechowywania długo żyjących obiektów. Zazwyczaj dla obiektu młodego pokolenia ustawiany jest próg, a po osiągnięciu tego wieku obiekt zostaje przeniesiony do starego pokolenia. W końcu trzeba zebrać stare pokolenie. To wydarzenie nazywa się wielkim zbiórką śmieci

Czym jest trwałe pokolenie?

The permanent generation zawiera metadane wymagane przez JVM do opisu klas i metod używanych w aplikacji. Stałe generowanie jest realizowane przez JVM na runtime na podstawie klas używanych przez aplikację.

PermGen został zastąpiony przez Metaspace od wydania Java 8.

parametry PermSize & MaxPermSize będą teraz ignorowane

Jak te trzy pokolenia oddziałują / odnoszą się do siebie?

Tutaj wpisz opis obrazka

Źródło obrazu i Oracle technetwork tutorial artykuł: http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

"ogólny proces zbierania śmieci " w powyższym artykule wyjaśnia interakcje między nimi za pomocą wielu diagramów.

Spójrz na diagram podsumowujący:

Tutaj wpisz opis obrazka

 32
Author: Ravindra babu,
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
2016-10-01 13:34:08

Wirtualna maszyna Javy podzielona jest na trzy pokolenia: Młode, Stare i trwałe. Większość obiektów jest początkowo przydzielana w młodym pokoleniu. Stare pokolenie zawiera obiekty, które przetrwały pewną liczbę kolekcji młodego pokolenia, a także niektóre duże obiekty, które mogą być przydzielone bezpośrednio w starym pokoleniu. Trwałe generowanie przechowuje obiekty, które JVM uzna za wygodne do zarządzania garbage collector, takie jak obiekty opisujące klasy i metody, a także same klasy i metody.

 14
Author: Mark R,
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
2010-01-24 21:57:38

Ten artykuł jest bardzo dobrą ankietą na temat śmieciarek. Definiuje podstawowe pojęcia i terminologię zbierania śmieci i zawiera wiele rysunków wyjaśniających. Jest to "must read" dla każdego, kto jest zainteresowany tym, jak działa automatyczna alokacja pamięci; czytanie go znacznie ułatwi Ci czytanie i zrozumienie różnych dokumentów, na które wskazywali inni.

(Brak w tym dokumencie jakichkolwiek informacji o badaniach nad śmieciarkami po 1993 roku, szczególnie cała działalność systemów wielordzeniowych. Mimo to, musisz nauczyć się chodzić, zanim nauczysz się biegać.)

 11
Author: Thomas Pornin,
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
2010-01-26 16:16:50

Zakładając, że mówisz o Sun JDK / OpenJDK, zobacz stronę na stronie OpenJDK na Storage Management . Istnieje kilka linków do jeszcze więcej informacji na dole.

 4
Author: Nicholas Riley,
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
2010-01-24 21:52:59

Chociaż chodzi o tuning, Nie mogę się oprzeć poleceniu tego dokumentu Spójrz na Rozdział 3 i przejdź do głębi, jeśli chcesz.

 3
Author: stacker,
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
2010-01-24 22:20:15

Pamięć w SunHotSpot JVM podzielona jest na trzy pokolenia: Młode, Stare i trwałe.

  • młode pokolenie: nowo stworzone obiekty są przydzielane młodemu generałowi.
  • Old Generation: jeśli nowy obiekt zażąda większej przestrzeni sterty, zostanie przydzielony bezpośrednio do starego gen. również obiekty, które przetrwały kilka cykli GC, zostaną awansowane do starego gen., tj.]}
  • Permanent Generation : Permanent generation przechowuje obiekty, które JVM uzna za wygodne do zarządzania garbage collector, takie jak obiekty opisujące klasy i metody, jak również same klasy i metody.

FYI: permanent gen nie jest uważany za część sterty Javy.

Jak te trzy pokolenia oddziałują/odnoszą się do siebie? Obiekty(z wyjątkiem dużych) są najpierw przydzielane młodemu pokoleniu. Jeśli obiekt pozostanie żywy po X no. z cykle zbierania śmieci jest promowany do starego / tenured gen. stąd możemy powiedzieć, że młody gen zawiera krótkotrwałe obiekty, podczas gdy stary Gen zawiera obiekty o długiej żywotności. Gen stały nie wchodzi w interakcje z pozostałymi dwoma pokoleniami.

 0
Author: KrityAg,
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
2015-06-29 14:58:38