文章字数: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 { |