微信公众号:【老张聊天】
一起改变,一起提升,一起进步啊!!
[欢迎大家扫码关注,转发,点赞!]
以下大部分内容基于周志明的《深入理解Java虚拟机 第三版》,第三版相比第二版更新了很多知识点。pdf版本已经上传到网盘,微信扫码关注回复【jvm】获取网盘地址和提取码
接着上一篇对象的创建,现在来讲下对象的内存布局。
二、对象的内存布局
HotSpot虚拟机中,对象的内存布局分为三个部分:【对象头(Header)】【实例数据(Instance Data)】【对齐补充(Padding)】
1、【对象头】
HotSpot虚拟机的【对象头】部分包括两类信息。
- 第一类是用于存储对象自身的运行时数据,如HashCode,GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分数据的长度在32位和64位的虚拟机(未开启指针压缩中)分别是32bit和64bit,官方称为【Mark Word】
- 对象头里的信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效率,根据对象状态的不同,Markword可以复用自己的空间。
- 对象头里的信息是与对象自身定义的数据无关的额外存储成本,考虑到虚拟机的空间效率,根据对象状态的不同,Markword可以复用自己的空间。