您的位置:首页 > 编程语言 > Java开发

java对象在内存中存储的布局

2016-09-01 19:07 316 查看
1)对象头

1,存储对象自身的运行时数据,如哈希码、GC分代年龄、键状态标识、线程持有的锁、偏向线程ID、偏向时间戳,对象头信息时与对象自身定义的数据无关的额外存储成本

2,类型指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象时哪个类的实例。

2)实例数据,对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容,无论从父类继承下来的还是在子类中定义的,都需要记录下来。这个部分的存储顺序会受到虚拟机分配策略参数和字段在java源码中定义的顺序的影响,相同宽度的字段总被分配到一块。

3)对其填充,没有特殊含义,只是起着占位符的作用。由于HotSpot VM的自动内存管理系统要求对象的起始地址必须是8字节的整数倍,就是对象的大小必须是8字节的整数倍,当对象的实例数据部分没有对齐的时候,就需要对齐填充来补全。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 虚拟机