[Dobry opis] [1] od gościa, który dużo wie o wewnętrznych cechach GC. Nawiasem mówiąc, na jego blogu jest mnóstwo przydatnych informacji związanych z GC. [1]: blogs.oracle.com/jonthecollector/entry/…
Ivan Dubrov
Odpowiedzi:
84
Trwała generacja. Szczegóły są oczywiście specyficzne dla implementacji.
Krótko mówiąc, zawiera obiekty Java powiązane z klasami i wewnętrznymi ciągami. W implementacji klienta firmy Sun z włączonym udostępnianiem classes.jsapamięć jest mapowana w celu utworzenia danych początkowych, z mniej więcej połową tylko do odczytu i połową kopiowaniem przy zapisie.
Obiekty Java, które są zaledwie stare, są przechowywane w generacji Tenured.
Która odpowiedź była akceptowana w momencie, gdy publikowałeś ten komentarz? Aktualnie przyjęta odpowiedź ( ta , którą napisał „Tom Hawtin - tackline”) wydaje mi się dokładna. Czy zmiana komentarza może mieć sens, aby ludzie nie mieli zaufania do aktualnie zaakceptowanej odpowiedzi?
jbyler
20
Trwała generacja. Zobacz przewodnik dotyczący strojenia java GC, aby uzyskać więcej informacji na temat garbage collectora.
Niezupełnie związane z pierwotnym pytaniem, ale może ktoś uzna je za przydatne. PermGen jest rzeczywiście obszarem w pamięci, w którym Java utrzymywała swoje klasy. Tak więc wielu z nas natknęło się na OOM w PermGen, gdyby było na przykład dużo zajęć.
Od wersji Java 8 obszar PermGen został zastąpiony obszarem MetaSpace, który jest bardziej wydajny i domyślnie nieograniczony (a ściślej - ograniczony ilością pamięci natywnej, w zależności od 32- lub 64-bitowej jvm i dostępności pamięci wirtualnej systemu operacyjnego). Można go jednak dostroić na kilka sposobów, na przykład określając maksymalny limit obszaru. Więcej przydatnych informacji znajdziesz w tym poście na blogu .
Jeśli dobrze pamiętam, gen oznacza generację, jak w pokoleniowym zbieraczu śmieci (który traktuje młodsze obiekty inaczej niż przedmioty w wieku średnim i „trwałe”). Zasada lokalności sugeruje, że nowo utworzone obiekty zostaną wymazane jako pierwsze.
Permgen oznacza Permanent Generation. Jest to jeden z obszarów pamięci JVM. Jest częścią Heap o stałym rozmiarze za pomocą flagi o nazwie MaxPermSize.
Skąd nazwa „PermGen”?
Ten permgen został nazwany we wczesnych dniach Java. Sieć Permgen przechowuje wszystkie metadane załadowanych klas. Problem polega jednak na tym, że po załadowaniu klasy pozostanie ona w JVM aż do wyłączenia JVM. Więc nazwa permgen jest taka. Ale później pojawiło się dynamiczne ładowanie klas, ale nazwa nie została zmieniona. Ale dzięki Java 8 rozwiązali również ten problem. Teraz permagen został przemianowany na MetaSpace z dynamicznym rozmiarem pamięci.
Odpowiedzi:
Trwała generacja. Szczegóły są oczywiście specyficzne dla implementacji.
Krótko mówiąc, zawiera obiekty Java powiązane z klasami i wewnętrznymi ciągami. W implementacji klienta firmy Sun z włączonym udostępnianiem
classes.jsa
pamięć jest mapowana w celu utworzenia danych początkowych, z mniej więcej połową tylko do odczytu i połową kopiowaniem przy zapisie.Obiekty Java, które są zaledwie stare, są przechowywane w generacji Tenured.
źródło
PermGen jest używany przez JVM do przechowywania załadowanych klas. Możesz go zwiększyć za pomocą:
-XX:MaxPermSize=384m
jeśli używasz Sun JVM lub OpenJDK.
Więc jeśli otrzymasz OutOfMemoryException: PermGen, musisz albo powiększyć PermGen, albo możesz mieć problemy z ładowaniem klas.
źródło
Trwała generacja. Zobacz przewodnik dotyczący strojenia java GC, aby uzyskać więcej informacji na temat garbage collectora.
źródło
Niezupełnie związane z pierwotnym pytaniem, ale może ktoś uzna je za przydatne. PermGen jest rzeczywiście obszarem w pamięci, w którym Java utrzymywała swoje klasy. Tak więc wielu z nas natknęło się na OOM w PermGen, gdyby było na przykład dużo zajęć.
Od wersji Java 8 obszar PermGen został zastąpiony obszarem MetaSpace, który jest bardziej wydajny i domyślnie nieograniczony (a ściślej - ograniczony ilością pamięci natywnej, w zależności od 32- lub 64-bitowej jvm i dostępności pamięci wirtualnej systemu operacyjnego). Można go jednak dostroić na kilka sposobów, na przykład określając maksymalny limit obszaru. Więcej przydatnych informacji znajdziesz w tym poście na blogu .
źródło
PermGen oznacza Permanent Generation .
Oto krótka notka o DDJ
źródło
Stałe pokolenie
źródło
Jeśli dobrze pamiętam, gen oznacza generację, jak w pokoleniowym zbieraczu śmieci (który traktuje młodsze obiekty inaczej niż przedmioty w wieku średnim i „trwałe”). Zasada lokalności sugeruje, że nowo utworzone obiekty zostaną wymazane jako pierwsze.
źródło
Permgen oznacza Permanent Generation. Jest to jeden z obszarów pamięci JVM. Jest częścią Heap o stałym rozmiarze za pomocą flagi o nazwie MaxPermSize.
Skąd nazwa „PermGen”?
Ten permgen został nazwany we wczesnych dniach Java. Sieć Permgen przechowuje wszystkie metadane załadowanych klas. Problem polega jednak na tym, że po załadowaniu klasy pozostanie ona w JVM aż do wyłączenia JVM. Więc nazwa permgen jest taka. Ale później pojawiło się dynamiczne ładowanie klas, ale nazwa nie została zmieniona. Ale dzięki Java 8 rozwiązali również ten problem. Teraz permagen został przemianowany na MetaSpace z dynamicznym rozmiarem pamięci.
źródło