Java虚拟机内存区域

对象的创建

对象的创建过程

给对象分配内存

指针碰撞(Bump The Pointer):使用指针分为空闲区,使用区。分配内存时把指针向空闲区移动

空闲列表(Free List):维护一个列表,记录哪些内存块是可用的

初始化对象(设置对象头的相关信息)

调用初始化方法:HotSpot创建对象代码片段

HotSpot创建对象代码片段

对象的结构

对象头(Header)

自身运行时数据(Mark Word):动态定义的数据结构

类型指针:对象指向它的类型元数据的指针。

实例数据(Instace Data)

所定义的各种类型的字段内容(父类继承,子类定义)

对齐填充(Padding):占位符

对象的访问定位

使用句柄

句柄形式的对象访问定位

堆中分出一块内存作为句柄池

reference存储的就是对象的句柄地址

句柄中包含了对象实例数据与类型数据各自具体的地址信息

特点:reference存储的是稳定句柄地址,在对象被移动(垃圾收集)时只会改变句柄中的实例数据指针,而reference本身不需要被修改。

直接指针(HotSpot)

指针形式的对象访问定位

reference存储的就是对象地址

特点:节省了一次指针定位的时间开销。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200424A0CVT700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券