首页 > 编程语言 > 详细

java对象在内存的分布

时间:2020-09-18 23:02:34      阅读:54      评论:0      收藏:0      [点我收藏+]

java对象在内存的分布
    (该节涉及到很多其他知识,并且实际应用中用不到,深入理解要花很多时间。我们只需要知道,为了节省64位电脑的空间,jvm会进行指针的压缩,减小对象占用大小。也会进行字段重排序。而这些背后,设计地址寻址,都有一定的规则,都可对jvm进行一些配置。太深,后期再学。)
    创建对象的方式有:new,克隆,反序列化,Unsafe.allocateInstance
    每次new一个对象,都会在构造器中调用父类构造器。子类对象包含所有的父类字段,只不过,父类的私有字段,子类对象不允许访问
    压缩指针:
        java对象头:标记字段,类型指针
                标记字段:哈希码,GC信息,锁信息
                类型指针:指向该对象的类。
        对象头的标记字段和类型指针各站64位,额外开销大。
        通过指针压缩,减少对象的内存使用量。
            那么压缩自后,对象怎么寻址,会有一套自己的算法。一般来说对象的起始地址需要对齐至8的倍数(内存对齐)。用不到8的对象,空白空间浪费。
            除了对象的内存对齐,字段也会进行内存对齐。原因是让字段只出现在同意cpu缓存行。不对齐的话,读取时要替换两个缓存行,存储时,会污染两个缓存行,影响程序执行效率。
    字段重排序,
        重新分配字段的先后顺序

java对象在内存的分布

原文:https://www.cnblogs.com/haiqichen/p/13693011.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!