java类在内存中的分布_java对象在内存的分布

java对象在内存的分布

(该节涉及到很多其他知识,并且实际应用中用不到,深入理解要花很多时间。我们只需要知道,为了节省64位电脑的空间,jvm会进行指针的压缩,减小对象占用大小。也会进行字段重排序。而这些背后,设计地址寻址,都有一定的规则,都可对jvm进行一些配置。太深,后期再学。)

创建对象的方式有:new,克隆,反序列化,Unsafe.allocateInstance

每次new一个对象,都会在构造器中调用父类构造器。子类对象包含所有的父类字段,只不过,父类的私有字段,子类对象不允许访问

压缩指针:

java对象头:标记字段,类型指针

标记字段:哈希码,GC信息,锁信息

类型指针:指向该对象的类。

对象头的标记字段和类型指针各站64位,额外开销大。

通过指针压缩,减少对象的内存使用量。

那么压缩自后,对象怎么寻址,会有一套自己的算法。一般来说对象的起始地址需要对齐至8的倍数(内存对齐)。用不到8的对象,空白空间浪费。

除了对象的内存对齐,字段也会进行内存对齐。原因是让字段只出现在同意cpu缓存行。不对齐的话,读取时要替换两个缓存行,存储时,会污染两个缓存行,影响程序执行效率。

字段重排序,

重新分配字段的先后顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值