Java对象内存布局概述

以HotSpot虚拟机为例,对象在内存中可以分为三块区域:对象头实例数据对齐填充。其中,对象头包含Mark Word和类型指针,关于对象头的内容,在gitchat中对其实现和原理都已经结合openjdk源码进行了详细的说明,其也不是本博文的主题,这里就不细说了;实例数据部分则是对象真正存储的有效信息,包含代码中所定义的字段内容;对齐填充则不是必须存在的,只是起占位符的作用,比如Hot Spot虚拟机要求对象大小必须是8字节的整数倍,而对象头刚好是8字节的倍数,所以当对象的实例数据没有对齐时,就需要通过对齐填充来补全。

注:关于类型指针,虚拟机可以通过这个它来确认该对象的元数据信息,比如它属于哪个类的实例。但是我们要注意,并不是所有的虚拟机都必须以这种方式来确定对象的元数据信息。对象的访问定位一般有句柄直接指针两种,如果使用句柄的话,那么对象的元数据信息可以直接包含在句柄中(当然也包括对象实例数据的地址信息),也就没必要将这些元数据和实例数据存储在一起了。至于实例数据和对齐填充,这里暂不做讨论。

一个对象字段既包括自身定义的,也包括从父类继承下来的,这些字段会按照顺序存储下来。而具体的存储顺序会受到虚拟机分配策略参数和字段在

  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值