开发者社区> 蓝帽子小智> 正文

JVM07_ 对象的实例化、内存布局(对象头、实例数据、对齐填充)、访问定位、直接内存(二)

简介: ③. 对象的内存布局 ①. 对象头(Header) ②. 实例数据(Instance Data) ③. 对齐填充(Padding)
+关注继续查看

③. 对象的内存布局


  • ①. 对象内部结构分为:对象头、实例数据、对齐填充(保证8个字节的倍数)


  • ②. 对象头分为对象标记(markOop)和类元信息(klassOop),类元信息存储的是指向该对象类元数据(klass)的首地址


微信图片_20220106143145.png


①. 对象头(Header)


①. 对象标记Mark Word 默认存储 (哈希值(HashCode )、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳)等信息


这些信息都是与对象自身定义无关的数据,所以MarkWord被设计成一个非固定的数据结构以便在极小的空间内存存储尽量多的数据。


它会根据对象的状态复用自己的存储空间,也就是说在运行期间MarkWord里存储的数据会随着锁标志位的变化而变化。



微信图片_20220106143207.png


②. 对象头多大 在64位系统中,Mark Word占了8个字节,类型指针占了8个字节,一共是16个字节


微信图片_20220106143229.png


③. 类元信息(又叫类型指针) 对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例


②. 实例数据(Instance Data)


  • 说明:它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身拥有的字段) 规则:


  1. 相同宽度的字段总被分配在一起


  1. 父类中定义的变量会出现在子类之前


  1. 如果CompactFields参数为true(默认为true),子类的窄变量可能插入到父类变量的空隙


③. 对齐填充(Padding)


  • ①. 不是必须的,也没特别含义,仅仅起到占位符作用
  • ②. 解释如下图:


微信图片_20220106143308.png




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【物联网智能网关-06】GPS定位+星图显示(WinForm库应用实例)
GPS不仅可以双向通信,还可以以二进制格式收发数据,并且可以配置需要发送数据的种类和发送间隔,当然必要的时候,还可以用专门的工具,更新GPS模块的固件。
826 0
《JavaScript启示录》——1.2 JavaScript构造函数构建并返回对象实例
如果说“构造函数只是一个函数”,那么我会说“你是对的,除非使用new关键字来调用该函数。”(如new String('foo'))。如果使用new调用某函数,该函数则担任一个特殊的角色,JavaScript给予该函数特殊待遇,将该函数的this值设置为正在构建的新对象。
1410 0
JVM07_ 对象的实例化、内存布局(对象头、实例数据、对齐填充)、访问定位、直接内存(一)
①. 从字节码角度看待对象的创建过程 ②. 对象的实例化(六个步骤)
23 0
《数据挖掘:实用案例分析》——1.2 数据挖掘在企业商务智能应用中的定位
本节书摘来自华章计算机《数据挖掘:实用案例分析》一书中的第1章,第1.2节,作者 张良均 陈俊德 刘名军 陈荣,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1413 0
C# 如何获取某个类型或类型实例对象的大小
原文:C# 如何获取某个类型或类型实例对象的大小 在统计类型或类型实例对象时,出了个异常: “不能作为非托管结构进行封送处理;无法计算有意义的大小或偏移量。”   后来查了一下,原来,我们创建的struct或是class都是属于复杂类型的。
1418 0
+关注
蓝帽子小智
一朵花凋零荒芜不了整个春天,一次跌倒也荒废不了整段旅程!
646
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载