文章字数:308,阅读全文大约需要1分钟
HotSpot JVM中java的对象是用OOP-Klass模型来对应的。
OOP
Ordinary Object Pointer 普通对象指针,主要职能是标识对象的实例数据(存储在堆里)。
根据JVM内部使用的对象业务类型,具有多种oopDesc子类,比如instanceOopDesc表示类的实例,arrayOopDesc表示数组。
包含:
Mark Word主要存储对象运行时记录信息,如hashcode、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等;- 元数据指针,
_metadata成员,可以表示未压缩和压缩的Klass指针,指向Klass对象(存储元数据的类)
1 | class oopDesc { |
Klass
包含元数据和方法信息,用来描述java类(存储在方法区)
每个已加载的java类都会创建一个instanceKlass对象,用来标识java内部类型的机制。
包含:
ClassState: 描述了类加载的状态:分配、加载、连接、初始化instanceKlass: 声明接口、字段、方法数组、常量池、源文件名等
1 | class instanceKlass: public Klass { |