2013-05-23 3 views
20

Was ist Klass & KlassKlass in JVM Hotspot-Implementierung?Was ist Klass & KlassKlass

Soweit ich aus dem Artikel Presenting the Perm Generation verstanden, Klass die interne Darstellung einer Java-Klasse ist (sie A sagt) & es wird die grundlegenden Informationen über die Struktur der Klasse einschließlich den Bytecode halten. Es wird als Objekt selbst gespeichert. Jedes Objekt der Klasse A besitzt einen Zeiger auf die interne Darstellung Klass in PermGen

KlassKlass ist die interne Darstellung der Klasse Klass. Warum wird KlassKlass benötigt? Welche zusätzlichen Informationen speichert es?

Auch ein KlassKlass'sKlass Zeiger verweist auf sich selbst, ich habe es auch nicht verstanden.

Antwort

20

Permanente Generation a.k.a permgen ist der Ort, an dem alle klassenbezogenen Informationen gespeichert sind. Es wird gelegentlich als Methodenbereich bezeichnet.

wir ein Beispiel des folgenden Codes nehmen:

public class Parent 
{ 
    ... 
} 

hier:

  • new Parent() ein Objekt von Parent Klasse.
  • (new Parent()).getClass() bezieht sich auf Klass von Parent. Der Referenztyp für dieses Objekt wäre java.lang.Class<Parent>. Dies würde die Informationen über Parent 's Anmerkungen, Konstruktoren, Felder, Methoden, seine Vererbung (Oberklasse, Schnittstellen) usw.
  • speichern. KlassKlass wäre (new Parent()).getClass().getClass(). Der Referenztyp für dieses Objekt wäre java.lang.Class<java.lang.Class>. Dies definiert die Informationen über java.lang.Class ‚s Anmerkungen, Konstrukteure, Felder, Methoden, sein Erbe (übergeordnete Klasse, Schnittstellen) usw.

Theoretisch diese Kette weitergehen könnte, aber KlassKlassKlass würde als KlassKlass gleich sein.

Inskort, bedeutet KlassKlass, dass Sie ein java.lang.Class Objekt haben, das das Verhalten von java.lang.Class selbst definiert.

this helps

-1

Ein Klass kann als Vorlage/Blue Print definiert werden, die die Verhaltensweisen/Zustände beschreibt, die das Objekt seines Typs unterstützt.

1

Sie scheinen ein gutes allgemeines Verständnis von Storage-Management in HotSpot zu haben. Um genauere Details zu erhalten, ist es eine gute Idee, zum Pferd zu gehen - in diesem Fall die Entwickler von HotSpot. This page ist ihre Beschreibung des Speicherverwaltungssystems.

In Situationen, in denen ich herausfinden möchte, was Code tut, versuche ich den Code zu finden und ihn zu lesen. In diesem Fall können wir eine Implementierung der KlassKlass-Klasse finden. Dies scheint keine zusätzlichen Informationen über Klass hinzuzufügen - was sehr interessant zu sehen ist. Beachten Sie, dass KlassKlassKlass erweitert.

Also warum brauchen wir es? Nun, wir können die Klass Hierarchie eines bestimmten Programms als einen Baum herausziehen, wo man einen anderen Klass beschreibt. Alles braucht eine Beschreibung, aber wir können nicht ewig so weitermachen, wir müssen ein fixed point finden, wo die Sache, die wir benutzen um etwas zu beschreiben, sich selbst ist - damit wir aufhören können!

Also, zusammenfassend KlassKlass tut nichts nützlicher als das vorhandene. Es muss existieren, aber seine Existenz ist ziemlich uninteressant.