Pola statyczne w JVM

0

Cześć wszystkim,
mam parę pytanie odnośnie JVM oraz pól statycznych. Z tego co się dowiedziałem to pola statyczne są przechowywane w JVM w pamięci PermGen (do wersji Javy 8 gdzie PermGen zostaje zastąpiony Metaspace), w jaki sposób są identyfikowane klasy w JVM (znajdujące się w PermGen)?

Chodzi mi przede wszystkim o przypadek, gdy na Tomcat'a wrzucimy dwa wary: projekt1.war oraz projekt2.war, które to są tym samym projektem, zawierającym klasę o nazwie "KlasaStatyczna" z polem statycznym "pole_statyczne". Czy w pamięci PermGen (pamięć PermGen zawiera definicję klas oraz pola statyczne) będzie tylko jedna definicja klasy "KlasaStatyczna" (a co za tym idzie pole "pole_statyczne" będzie współdzielone pomiędzy projekt1 oraz projekt2), czy będą dwie klasy "KlasaStatyczna" (i każda z nich posiadać będzie swoje "pole_statyczne" widoczne tylko w swoim projekcie)?

1

Będą dwie klasy statyczne i każda z nich będzie miała swoje pola statyczne.

0

Każdy ClassLoader ma własną wersję klas, a więc także pól statycznych - no chyba, że deleguje do ClassLoadera wyżej w hierarchii.

PermGen ZTCW to przechowuje obiekty klasy Class, czyli np bajtkod, a same statyczne pola innych klas są w normalnej stercie. Aktualizacja: OK, same pola są w PermGenie, ale obiekty do których się odwołują są już w normalnej stercie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1