深入理解Java虚拟机——对象的结构

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解Java虚拟机——对象的结构相关的知识,希望对你有一定的参考价值。

目录

一、对象的结构

  • 对象的结构包括对象头(Object Header)、实例数据(Instance Data)和对齐填充(Padding)三部分。

二、对象头(Object Header)

  • 自身运行时数据
    自身运行时数据包括哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等。这部分数据的长度在32位和64位的虚拟机(未开启压缩指针)中分别为32bit和64bit,官方称它为“Mark Word”。
  • 类型指针
    类型指针即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是那个类的实例。

三、实例数据(Instance Data)

  • 实例数据是对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。
  • 实例数据的存储顺序会受到虚拟机分配策略参数(FiledsAllocationStyle)和字段在java源码中定义顺序的影响。
  • HotSpot虚拟机默认的分配策略为longs/doubles、ints、shorts/chars、bytes/booleans、oops(Ordinary Object Pointers)

四、对齐填充(Padding)

  • 对齐填充不是必然存在的,也没有特别的含义,它仅仅起着占位符的作用。

以上是关于深入理解Java虚拟机——对象的结构的主要内容,如果未能解决你的问题,请参考以下文章

《深入理解java虚拟机》笔记类的加载机制

深入理解java虚拟机---4虚拟机类加载机制

Java虚拟机系列(25篇文章)一起啃

《深入理解Java虚拟机》读后笔记-HotSpot虚拟机对象探秘

深入理解java虚拟机HotSpot Java对象创建,内存布局以及訪问方式

深入理解Java虚拟机(类文件结构)