JVM-对象

126 阅读1分钟

七、对象

上一章友情小链接

稀掘星球的朋友们,前面讲到方法区,堆实例对象数据通过到对象类型的指针指向方法区,那么JVM的设计者们是如何设计做到的呢,让我们知其然知其所以然,一探到底。

(一) 对象的实例化

我们开发过程中最常见的当然就是new一个对象啦,其他的我这里也整理了下

  • class的newInstance() 反射的方法,不过JDK1.8之后变成了 constructor的newInstance() 方法
  • 使用clone复制对象
  • 通过反序列化的方式 那么具体如何创建呢,这里采取了六步走的步骤
  1. 判断对象对应的类是否加载、链接、初始化
  2. 为对象分配内存
  3. 处理并发安全问题
  4. 默认初始化
  5. 设置对象头的信息
  6. 执行init方法进行初始化
(二) 对象的内存布局

对象在堆中的内部构成是如何的呢,它由三大部分组成,对象头、实例数据、对齐填充,结合图示

image.png

(三) 对象访问定位

JVM又是如何通过栈桢中的对象引用访问到其内部的实例对象的呢?目前的话有两种方式,一种是句柄访问,另一种是采用直接指针的方式,这一种也是目前hotSpot虚拟机采用的。

  • 直接指针
  • 句柄访问 需要在堆空间中开辟一块句柄空间,会占用多一份空间,好处就是对象修改只需要改变句柄对象的指针

image.png