Permament Generation - po co jest

Permament Generation - po co jest
0

Witam,
Próbuje lepiej zrozumieć znaczenie Permament Generation w JVM.

Czytam, ze:

Kopiuj
Permanent Generation (non-heap): The pool containing all the reflective
  data of the virtual machine itself,
  such as class and method objects. With
  Java VMs that use class data sharing,
  this generation is divided into
  read-only and read-write areas.</quote>
Nie rozumiem dlaczego przechowywanie kopii wszystkich klas ma sens. Pewnie chodzi o wydajnosc. Moje pytanie jest nastepujace:
1. Po co wlasciwie istnieje Permament Generation, jakie sa korzysci z jego istnienia?

Pozdrawiam,
Wibowit
  • Rejestracja:około 20 lat
  • Ostatnio:3 minuty
0

Prawdopodobnie istnieje po to, by nie tracić niepotrzebnie CPU na przelatywanie obiektów klas przez odśmiecacza. Klasy generalnie rzadko są osieracane, czyli rzadko są kandydatami do odśmiecania, więc można je zostawić w spokoju na dłuższy czas.

W Javie 8 ponadto zmieniono trochę podejście i zamieniono PermGen na Metaspace: http://java.dzone.com/articles/java-8-permgen-metaspace
Zysk jest taki, że nie trzeba z góry ustawiać limitu dla Metaspace - sam może się dynamicznie kurczyć i powiększać.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit
Koziołek
Moderator
  • Rejestracja:około 18 lat
  • Ostatnio:około 21 godzin
  • Lokalizacja:Stacktrace
  • Postów:6822
0

Nie rozumiem dlaczego przechowywanie kopii wszystkich klas ma sens.

Pozwolę sobie zacytować siebie > http://roflcopter.pl/631

<koziolek>Tu uwaga, zauważyłem, że mylisz pojęcia obiekt, klasa i klasa reprezentująca klasę oraz obiekt klasy reprezentującej klasę

Generalnie w tej przestrzeni przechowujemy wszystkie te informacje, które nie są bezpośrednio związane z wykonaniem programu, ale są niezbędne do jego prawidłowego działania.

  • VM jako taką.
  • definicje klas, metod, inaczej mówiąc załadowane pliki class

Ergo, w PermGen leżą sobie informacje o tym co znajduje się w ramach danej maszyny wirtualnej. Informacje te nie są istotne z punktu widzenia wykonywanego programu lecz stanowią jego definicję. To trochę jakbyś używał katalogu samochodowego - masz tam informacje o poszczególnych modelach, ale nie ma to większego wpływu na to jak nimi się w rzeczywistości jeździ. Ta rzeczywistość to konkretne aplikacje działające w ramach VMa


Sięgam tam, gdzie wzrok nie sięga… a tam NullPointerException
0

Podobają mi się te wytłumaczenia. Bardzo Wam dziękuję.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.