24

JVM ホットスポット実装におけるKlass&とは?KlassKlass

私が記事Perm Generationを提示することから理解している限りKlass、Java クラスの内部表現 (たとえばA) であり、バイトコードを含むクラスの構造に関する基本情報を保持します。オブジェクト自体として保存されます。クラス A のすべてのオブジェクトは、KlassPermGen に存在する内部表現へのポインターを持ちます。

KlassKlass は、Klassクラス自体の内部表現です。なぜKlassKlass必要なのですか?どのような追加情報が保存されていますか?

また、KlassKlass's Klassポインタは自分自身を指していますが、私もそれを理解していませんでした。

4

2 に答える 2

28

Permanent Generation aka permgen は、すべてのクラス関連情報が保存される場所を指します。メソッド領域と呼ばれることもあります。

次のコードの例を見てみましょう。

public class Parent
{
    ...
}

ここ:

  • new Parent()Parentクラスのオブジェクトです。
  • (new Parent()).getClass()Klass親のことを指します。このオブジェクトの参照型は になりますjava.lang.Class<Parent>Parentこれは、 の注釈、コンストラクター、フィールド、メソッド、その継承 (スーパークラス、インターフェース) などに関する情報を格納します。
  • KlassKlass は(new Parent()).getClass().getClass(). このオブジェクトの参照型は になりますjava.lang.Class<java.lang.Class>。これは、java.lang.Classの注釈、コンストラクター、フィールド、メソッド、その継承 (スーパークラス、インターフェース) などに関する情報を定義します。

理論的には、このチェーンは続く可能性がありますが、KlassKlassKlass は KlassKlass と同じになります。

つまり、KlassKlass は、それ自体java.lang.Classの動作を定義する 1 つのオブジェクトを持つことを意味しますjava.lang.Class

お役に立てれば

于 2013-06-11T20:22:27.160 に答える