虚拟机学习三-对象的内存布局

对象在内存中的布局可以分为3块区域:

对象头(Header):一部分是用来存储对象自身运行时的数据(如哈希码,GC分代年龄)。这部分被设置为非固定的数据结构,即根据对象的状态对象头不同字段所占的大小不一样,但总大小都是32bit或64bit。另一部分是类型指针,即对象指向它的类元数据的指针,确定对象是哪一个类的实例。(如果对象是一个Java数组,那在对象头中中还必须有一块用于记录数组长度的数据)

实例数据(Instance Data):真正存储的有效信息,也是在程序中所定义的各种类型的字段的内容。

对齐填充(Padding):不是必然存在,当实例数据部分不足8字节的倍数时将通过对其填充来补齐。

对象访问定位的两种方式:

句柄:Java堆中将会划出一块内存来作为句柄池,reference中存储的地址就是对象的句柄地址。而句柄中包含了指向对象实例数据(堆中的实例池)与指向类型数据(方法区)的指针。

直接指针:reference中存储的直接就是对象地址,那里包含了实例数据和指向对象类型数据的指针(指向方法区)。

 

转载于:https://www.cnblogs.com/SunseCode/p/4265885.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值