对象内存布局与对象头

这篇具有很好参考价值的文章主要介绍了对象内存布局与对象头。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

对象内存布局

在Hotspot虚拟机里,对象在堆内存中的存储布局可以划分为三个部分:对象头、实例数据、对齐填充。

对象内存布局与对象头,JVM,jvm

对象头

在64为系统中,Mark word 占了8个字节,cla ss Pointer 占了8个字节。从jdk1.8开始,存在指针压缩,class Pointer 占4个字节。

jvm默认开启的:-XX:+UserCompressedClassPointers 压缩指针

对象标记 Mark Word
对象内存布局与对象头,JVM,jvm

存储着:hash码、gc标记、gc次数(年龄)、同步锁标记、偏向锁持有者

gc的分代年龄只有4位,所以最大年龄15

类元信息(类型指针class Pointer)

类元信息就是new 某个对象的模板,即ObjectDemo1 o1 = new ObjectDemo1(); 的ObjectDemo1。 里面的属性为实例数据。

对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是那个类的实例。


class Resouce{ //只含对象头
}

class Book{//有实例数据,16字节(忽略指针压缩)+ 4字节 + 1字节 = 21字节,由于对齐填充为24字节
    int id;
    boolean flag;
}

实例数据

存放类的属性(field)数据信息,包括父类属性信息。

对齐填充

虚拟机要求对象起始地址必须是8字节的整数倍。它的存在不是必须的,仅仅是为了字节对齐这部分内存按照8字节补充对齐。文章来源地址https://www.toymoban.com/news/detail-660494.html

到了这里,关于对象内存布局与对象头的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • jvm对象内存划分

    jvm内存空间是逻辑上连续的虚拟地址空间(虚拟内存中的概念)映射到物理内存(不一定连续),物理内存不足时还会将物理内存中的数据交换到swap(磁盘的一块区域)。 这块水有点深,查阅资料做了个个人的总结。 内存划分,有 指针碰撞 和 空闲列表 这两种划分方式: 1、

    2024年02月07日
    浏览(44)
  • JVM 给对象分配内存空间

    指针碰撞 空闲列表 TLAB 为对象分配空间的任务实际上便等同于把一块确定大小的内存块从Java堆中划分出来。 指针碰撞:(Bump The Pointer) 堆的内存是绝对规整的,内存主要分为两部分,所有使用过的内存被放在一边,空闲的内存被放在另一边,中间放着一个指针作为分界点

    2024年02月11日
    浏览(36)
  • jvm对象创建和内存分配优化

    1、类加载检测 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 new指令对应语言层面讲是,new、对

    2024年02月13日
    浏览(56)
  • 06-JVM对象内存回收机制深度剖析

    上一篇:05-JVM内存分配机制深度剖析 堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡( 即不能再被任何途径使用的对象 )。 给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1;当引用失效,计数器就减1;任何时候计

    2024年02月09日
    浏览(44)
  • JVM 内存大对象监控和优化实践

    作者:vivo 互联网服务器团队 - Liu Zhen、Ye Wenhao 服务器内存问题是影响应用程序性能和稳定性的重要因素之一,需要及时排查和优化。本文介绍了某核心服务内存问题排查与解决过程。首先在JVM与大对象优化上进行了有效的实践,其次在故障转移与大对象监控上提出了可靠的

    2024年02月10日
    浏览(41)
  • JVM—对象的创建流程与内存分配

    对象创建的流程图如下: 内存分配的方式有两种: 指针碰撞(Bump the Pointer) 空闲列表(Free List) 分配方式 说明 收集器 指针碰撞(Bump the Pointer) 内存地址是连续的(新生代) Serial和ParNew收集器 空闲列表(Free List) 内存地址不连续(老年代) CMS收集器和Mark-Sweep收集器

    2024年04月10日
    浏览(48)
  • JVM对象创建与内存分配机制深度剖析

    (1)类加载检查 虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程; 所以所类加载是 懒加载 ; new指令对应到语

    2024年02月13日
    浏览(48)
  • JVM-java对象内存分布(二)

    目录 一、栈针 二、java 对象内存分布 1、那何为java内存对象布局? 2、什么是jvm的内存模型 1、如果我们新生代,一直创建新对象,此时我们新生代不够用了怎么办? 2、那么为什么大部分对象的生命周期比较短呢?这个结论哪来的呢? 3、那么为什么是这个8:1:1呢? 4、就是

    2024年02月11日
    浏览(38)
  • JVM运行时区域——对象创建内存分配过程

            新创建的对象 , 都存放在伊甸园区域 ,当垃圾回收时,将伊甸园区域的垃圾数据销毁,然后将存活的对象转移到幸存者0区域,之后创建的新的对象还是存放在伊甸园区域,等到再次垃圾回收后,将伊甸园区域和幸存者0区域中存活的对象一起转移到幸存者1区域中

    2024年02月15日
    浏览(46)
  • JVM对象在堆内存中是否如何分配?

    1:指针碰撞:内存规整的情况下 2:空闲列表: 内存不规整的情况下 选择那种分配方式 是有 java堆是否规整而决定的。而java堆是否规整是否对应的垃圾回收器是否带有空间压缩整理的能力决定的。 因此当使用Serial,ParNew等带有压缩整理过程的收集器时,系统采用的分配算法是

    2024年02月16日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包