Czym jest Klass & KlassKlass

Co to jest Klass & KlassKlass w implementacji JVM Hotspot?

Z tego co zrozumiałem z artykułu prezentującego pokolenie Perm, Klass jest wewnętrzną reprezentacją klasy Java (powiedzmy A) i przechowuje ona podstawowe informacje o strukturze klasy łącznie z kodem bajtowym. Zostanie on zapisany jako sam obiekt. Każdy obiekt klasy A będzie miał wskaźnik do wewnętrznej reprezentacji Klass obecnej w PermGen

KlassKlass jest wewnętrzna reprezentacja samej klasy Klass. Dlaczego KlassKlass jest potrzebne? Jakie dodatkowe informacje są przechowywane?

Również, a KlassKlass's Klass pointer wskazuje na siebie, ja też tego nie rozumiałem.

Author: feeling abused and harassed, 2013-05-23

3 answers

Permanent Generation vel permgen to odniesienie do miejsca, w którym przechowywane są wszystkie informacje związane z klasą. Czasami nazywany jest method-area.

Weźmy przykład następującego kodu:

public class Parent
{
    ...
}

Tutaj:

  • new Parent() jest obiektem klasy Parent.
  • (new Parent()).getClass() odnosi się do Klass rodzica. Typ odniesienia dla tego obiektu to java.lang.Class<Parent>. Przechowywałoby to informacje o adnotacjach Parent, konstruktorach, polach, metodach, jej inheritance (superclass, interfaces) etc
  • KlassKlass będzie (new Parent()).getClass().getClass(). Typ odniesienia dla tego obiektu to java.lang.Class<java.lang.Class>. Definiuje to informacje o adnotacjach java.lang.Class, konstruktorach, polach, metodach, ich dziedziczeniu (klasach nadrzędnych, interfejsach) itp.

Teoretycznie ten łańcuch mógłby trwać, ale KlassKlassKlass byłby taki sam jak KlassKlass.

Inshort, KlassKlass oznacza, że masz jeden java.lang.Class obiekt, który definiuje zachowanie java.lang.Class siebie.

Hope this helps

 22
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-11 20:22:27

Wydaje się, że masz dobrą ogólną wiedzę na temat zarządzania pamięcią masową w hotspocie. Aby uzyskać więcej szczegółów, dobrze jest udać się do paszczy konia - w tym przypadku twórcy HotSpot. Ta strona jest ich opisem systemu zarządzania pamięcią masową.

W sytuacjach, gdy chcę dowiedzieć się, co robi jakiś kod, staram się znaleźć kod i go przeczytać. W tym przypadku możemy znaleźć implementację klasy KlassKlass tutaj . To chyba nie dodaje dodatkowa informacja na górze Klass - która jest bardzo ciekawa. Zauważ, że KlassKlass rozszerza Klass.

Więc po co nam to? Cóż, możemy narysować Klass hierarchię konkretnego programu jako drzewo, w którym jeden Klass opisuje inny. Wszystko wymaga opisu, ale nie możemy tak ciągnąć w nieskończoność, musimy znaleźć punkt stały gdzie rzecz, której używamy do opisania czegoś, jest sama w sobie - więc możemy przestać!

Więc w podsumowaniu KlassKlass nie robi nic bardziej użytecznego niż istniejące. Musi istnieć, ale jego istnienie jest dość nieciekawe.

 2
Author: selig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-11 23:10:49

Klasa może być zdefiniowana jako szablon / Niebieski druk opisujący zachowania / Stany tego obiektu jego typu.

 -1
Author: Anil M H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-27 10:13:47