Ucząc się o profilowaniu pamięci w Javie, oprócz „sterty” wciąż widzę termin „przestrzeń perm”. Wiem, co to jest kupa - co to jest perm?
Ucząc się o profilowaniu pamięci w Javie, oprócz „sterty” wciąż widzę termin „przestrzeń perm”. Wiem, co to jest kupa - co to jest perm?
Odpowiedzi:
Oznacza trwałe pokolenie :
Trwałe generowanie jest wyjątkowe, ponieważ zawiera metadane opisujące klasy użytkowników (klasy, które nie są częścią języka Java). Przykładami takich metadanych są obiekty opisujące klasy i metody, które są przechowywane w Permanent Generation. Aplikacje z dużą bazą kodu mogą szybko zapełnić ten segment sterty, co spowoduje
java.lang.OutOfMemoryError
: PermGen bez względu na to, jak wysoki jest twój -Xmx i ile masz pamięci na maszynie.
Perm space
służy do przechowywania informacji o załadowanych klasach i kilku innych zaawansowanych funkcjach, takich jak String Pool
(do wysoce zoptymalizowanego testowania równości ciągów), które zwykle są tworzone za pomocą String.intern()
metod. Ponieważ Twoja aplikacja (liczba klas) będzie rosła, przestrzeń ta zostanie szybko zapełniona, ponieważ czyszczenie pamięci w tej przestrzeni nie jest zbyt skuteczne w wymaganym miejscu, szybko otrzymasz komunikat Out of Memory: perm gen space error. Po tym czasie żadna aplikacja nie będzie działać skutecznie na tym komputerze, nawet po ogromnym, pustym JVM.
Przed uruchomieniem aplikacji powinieneś java -XX:MaxPermSize
pozbyć się tego błędu.
Perm Gen oznacza trwałe generowanie, które przechowuje informacje metadane o klasach.
Przestrzeń permgen jest zawsze nazywana obszarem metody. Kiedy podsystem classloader załaduje plik klasy (kod bajtowy) do obszaru metody (permGen). Zawiera wszystkie metadane klasy, np .: w pełni kwalifikowaną nazwę Twojej klasy, w pełni kwalifikowaną nazwę bezpośredniej klasy nadrzędnej, informacje o zmiennej, informacje o konstruktorze, informacje o stałej puli itp.
To, co istnieje w PremGen: Class Area, wchodzi w zakres PremGen. Pola statyczne są również rozwijane w czasie ładowania klasy, więc istnieją również w PremGen. Tutaj przechowywany jest obszar puli stałej zawierający wszystkie niezmienne pola, które są zebrane jak łańcuch. Oprócz tego znajdują się również dane klas ładowane przez programy ładujące klasy, tablice obiektów, wewnętrzne obiekty używane przez jvm.
PermGen Space oznacza alokację pamięci do trwałego generowania. Wszystkie niezmienne obiekty Java należą do tej kategorii, podobnie jak te, String
które są tworzone za pomocą literałów lub String.intern()
metod i do ładowania klas do pamięci. PermGen Space przyspiesza nasze wyszukiwanie równości ciągów.