2017-02-27 3 views
0

これらのうちの1つが「instanceKlassはJavaクラスのVMレベル表現です」と記述されています。もう1つは、「klassOopはJavaクラスのC++に相当します」ということです。その違いは何ですか?なぜ我々はそれらの両方が必要なのですか、2対1を組み合わせることはできますか? http://hg.openjdk.java.net/jdk7u/jdk7u60/hotspot/file/ba66650acf63/src/share/vm/oops/instanceKlass.hpp http://hg.openjdk.java.net/jdk7u/jdk7u60/hotspot/file/ba66650acf63/src/share/vm/oops/klassOop.hppklassoopとinstanceklassの実際の違いは何ですか?

答えて

1

instanceKlassKlassの特定の子孫であるので、klassOopKlassを比較することがより正確だろう。

JDK 7クラスのメタデータは、Permanent Generation of Java Heapに格納されていました。 Javaヒープクラスのすべてのオブジェクトと同様に、メタデータにはオブジェクトヘッダーがあります。 klassOopは、基本的にC++ KlassオブジェクトをJavaヒープオブジェクト(OOP)にラップするラッパーでした。

 _________________ 
    |     | 
    | mark_word  | <-- OOP header 
    | klass_field  | 
    | _______________ | 
    ||    || 
    || C++ vtbl ptr || <-- InstanceKlass data 
    || subtype cache || 
    || instance size || 
    || java mirror || 
    || super   || 
    || access_flags || 
    || name   || 
    || ...   || 
    ||_______________|| 
    |_________________| 

はJDK 8のでこれ以上永続的な世代が存在しないともはやklassOopエンティティがあります。すべてのクラスメタデータは、通常のC++オブジェクトとしてメタスペースに格納されます。

HotSpot JVMの内部を調べたい場合は、代わりにjdk8uリポジトリを調べることをお勧めします。

+0

ありがとうございます。 –

関連する問題