介绍
- Java是一种面向对象的语言,而Java对象在JVM中存储是由一定结构的。而这个 Java对象自身的存储模型称之为Java对象模型
- HotSpot虚拟机中,设计了一个OOP-Klass Model.OOP指的是普通对象指针,而Klass用来描述对象的具体类型。
- 如下图所示是一个简单的Java对象的OOP-Klass模型,也就是Java对象模型
Java对象创建过程
- 类加载检查:虚拟机遇到new字节码指令的时候,首先去检查这个指令的参数是够可以在常量池中找到对象的符号引用,并且检查这个符号引用是否已经被加载过、解析、和初始化过,如果没有,则必须先要执行相应的类加载过程
- 分配内存:在类加载检查完后,接下来虚拟机会为对象分配内存。对象所需的大小在类加载完成后便可确定,为对象分配空间的任务相当于在堆中开辟出一块确定的大小,分配方式有指针碰撞、空闲列表两种,具体使用哪种还需要看Java堆的规整程度,是够规整取决于使用的何中垃圾回收算法,如果使用标记压缩则使用指针碰撞,标记清除则使用空闲列表
- 初始化零值:内存分配完成后,虚拟机要对对象完成必要的设置,例如这个对象是哪个类的实例,如果才能找到类的元数据信息、对象的哈希码、GC分代年龄等信息都是存放在对象头中的。另外根据虚拟机当前的运行状态不同