Co to jest perm space?


Odpowiedzi:


103

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.


Andrew, jestem po prostu ciekawy, jaki może być rozmiar PerGen?
gks

Ciekawe, czy permgen jest częścią pamięci sterty (jak stwierdzono w tej odpowiedzi), czy też jest poza stertą (jak stwierdzono w tej odpowiedzi - stackoverflow.com/a/31103100/3061686 ).
akki

25

Perm spacesł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:MaxPermSizepozbyć się tego błędu.


Pula stringów zostaje przeniesiona do miejsca na sterty od czasu Java 7.
Caffeine Coder

20

Prosta (i nadmiernie uproszczona) odpowiedź: to tutaj jvm przechowuje własne dane księgowe, w przeciwieństwie do twoich danych.


17

Perm Gen oznacza trwałe generowanie, które przechowuje informacje metadane o klasach.

  1. Załóżmy, że jeśli utworzysz nazwę klasy A, jej zmienna instancji będzie przechowywana w pamięci sterty, a klasa A wraz ze statycznymi programami ładującymi klasy będzie przechowywana na stałe.
  2. Odśmiecaczom będzie trudno wyczyścić lub zwolnić miejsce w pamięci stałej generacji. Dlatego zawsze zaleca się utrzymywanie ustawień pamięci permgen na zalecanym limicie.
  3. JAVA8 wprowadził koncepcję zwaną generowaniem metaprzestrzeni, dlatego permgen nie jest już potrzebny, gdy używasz wersji jdk 1.8.

5

Przestrzeń permgen to obszar sterty, który zawiera wszystkie odblaskowe dane samej maszyny wirtualnej, takie jak obiekty klas i metod.


3

Zawiera takie rzeczy, jak definicje klas, pula ciągów, itp. Myślę, że można to nazwać metadanymi.


3

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.


2

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.


1

PermGen Space oznacza alokację pamięci do trwałego generowania. Wszystkie niezmienne obiekty Java należą do tej kategorii, podobnie jak te, Stringktó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.


1
  • JVM ma wewnętrzną reprezentację obiektów Java, a te wewnętrzne reprezentacje są przechowywane na stercie (w młodym pokoleniu lub w pokoleniu najemnym).
  • JVM ma również wewnętrzną reprezentację klas Java, które są przechowywane w trwałej generacji

wprowadź opis obrazu tutaj

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.