二(2)HotSpot虚拟机对象探秘

2017-02-24  本文已影响0人  洪延波

深入探讨HotSpot虚拟机在JAVA堆中对象分配,布局和访问的过程.

对象创建过程

这里说的创建对象是不包括数组和Class对象的.

1.首先检查这个类是否已被加载,解析和初始化过.如果没有,那必须先执行相应的类加载过程.

  1. 接下来为新生对象分配内存.对相关所需内存的大小在类加载完成后便可完全确定.
  2. 内存分配完成后,虚拟机需要将分配到的内存空间全都初始化为零值.(不包括对象头),如果使用TLAB这一工作也可以提前至TLAB分配时进行.
  3. 接下来虚拟机要对对象进行必要的设置,例如这个对象是哪个类的实例,如何才能找到类的元数据信息,对象的哈希码,对象的GC分代年龄等信息,这些信息放在对象头中,
  4. 执行init方法.按照程序员的意愿进行初始化.

对象的内存布局

对象在内存中存储的布局可以分为三块区域:对象头(header) ;实例数据(Instance Data)和对齐填充(Padding).

对象的访问定位

对象的访问方式会因虚拟机的实现而不同,目前主流的有使用句柄和直接指针两种.

句柄两部分分别指向堆内存中的对象数据和方法区中的类型数据

虚拟机参数

上一篇 下一篇

猜你喜欢

热点阅读