jvm 内存管理-hotspot虚拟机对象内存布局和访问定位

内存布局

在hotspot虚拟机中,对象在内存存储布局分为3块:对象头,实例数据,对齐填充

对象头包括两部分信息:

  • 存储对象自身的运行时数据:哈希码,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时间戳
  • 类型指针:对象指向类元数据的指针,虚拟机通过该指针确定对象是哪个类的实例。
  • 如果是数据,对象头还需有一块记录数组长度的内存(普通java对象可通过元数据确定对象大小,数组不行)

    实例数据部分:存储真正的有效信息,程序代码所定义的各种类型的字段内容,包括父类继承下来的和子类定义的,
  • 对齐填充并不是必须存在,占位符作用,对象的大小必须是8字节的整数倍

访问定位

建立对象是为了访问对象,java通过栈上的reference数据来操作堆上的数据,目前主流访问方式有两种

句柄访问:reference存储对象的句柄地址,java堆划分一部分内存作为句柄池,句柄包括对象实例和类型数据各自的地址信息。

优点:对象移动(GC时对象移动频繁)只改变句柄示例数据指针,reference不需要改变

指针访问:reference存储对象指针

优点:节省一次指针定位的时间,速度更快,hotspot使用这个方式

 

本文内容主要是学习周志明老师的《深入理解Java虚拟机》一书的学习笔记,仅作学习巩固整理知识点使用,在此感谢周老师。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值