对象的创建、内存布局和访问定位

来源:互联网 发布:统计直报网乱报数据 编辑:程序博客网 时间:2024/05/10 19:03

对象的创建

  • 1.虚拟机遇到一条new指令,首先检查该类是否加载,否则先执行类加载过程。
  • 2.类加载检查通过,虚拟机将会为对象分配内存,内存分配完毕,然后就进行一些必要的设置,例如这个对象是哪个类的实例,如何才能找到类的元数据信息,对象的哈希吗,对象的GC分代年龄信息等。这些信息放在对象的对象头中。
  • 执行init方法,把对象按照程序员的意愿进行初始化,至此,完整可用的对象完全产生。

对象的内存布局

  • 对象头
  • 实例数据
  • 对齐填充

1.对象头

对象头分2部分,第一部分用于存储对象自身的运行时数据,如哈希码、GC年龄、锁状态、偏向线程ID等等,官方称之为Mark Word;第二部分是类型指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。

2.实例数据部分

无论父类继承下来的还是子类中定义的,都存在这里。

3.对齐填充

HotSpot VM要求对象大小必须是8字节的整数倍

对象的访问定位

主流的访问方式有2种,句柄直接指针访问

1.句柄

一个引用指向句柄池,池中存储对象指针和对象类型指针。注意:句柄池存储于堆中。

2.直接指针

引用直接指向对象,对象中需要额外存储空间来存储对象类型信息。

0 0
原创粉丝点击