klassOop是个啥?

源码

klassOop是klassOopDesc的指针


klassOop是个啥?_第1张图片
klassOop

那klassOopDesc又是个啥?

klassOop是个啥?_第2张图片
klassOopDesc

如源码中注释所述,klassOopDesc是C++对Java类的描述,其中包含了一个Klass。

Java对象在内存中的结构

klassOop是个啥?_第3张图片
对象结构

这幅图其实有些误导,其中的instanceKlass等等其实应该是klassOop,估计是写不下了,省略了吧。
再如下图,hsdb也有些误导,Oop的_metadata._klass指向的应该是klassOop:

klassOop是个啥?_第4张图片
hsdb

组合

klassOop与其包含的Klass是如何相互引用的?通过如下,两个函数:

klass_part
as_klassOop

原理

jdk8之前,方法区内描述类型的元数据对象klass,也由GC管理。而由GC管理的对象,必须都继承自oopDesc,所有才会有klassOopDesc做为Klass的替身。jdk8中就没有这个必要了。

参考

klass与oop

你可能感兴趣的:(klassOop是个啥?)