JAVA对象内存布局

1、java对象内存布局

在hotSpot虚拟机中,对象在内存中的布局可以分成对象头、实例数据、对齐填充三部分。

对象头:它主要包括对象自身的运行行元数据,比如哈希码、GC分代年龄、锁状态标志等;同时还包含一个类型指针,指向类元数据,表明该对象所属的类型

实例数据:它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段)

对齐填充:它不是必要存在的,仅仅起着占位符的作用


2、对象的访问方式

目前比较主流的访问方式有使用句柄和直接指针两种。

句柄方式:它将java堆划分出一块内存来作为句柄池,结构如图所示:


这种方式的优点就是reference中存储的是稳定的够本地址,在对象移动时只需要改变句柄池中实例数据指针,而reference本身不需要修改


直接指针方式:


它的优点就是访问速度快

猜你喜欢

转载自blog.csdn.net/LClansefengbao/article/details/37725131