Java实例对象的结构

526 阅读1分钟

Java对象保存在内存中的结构如下:

主要分为3大部分:

  1. 对象头
  2. 对象体
  3. 对齐部分

对象头

对象头一般由两部分组成:Mark WordClass Metadata Address。如果是数组类型,则对象头中会多一项:Array Length,也就是存储数组的长度。

Mark Word

主要用来表示对象的线程锁状态,另外还可以用来配合GC、存放该对象的hashCode、GC分代年龄、锁状态标志、线程持有帧、线程持有的锁、线程偏向ID、偏向时间戳等。这部分长度为一字宽

Class Metadata Address

对象指向它的类元数据的指针。长度也是一字宽

对象体

这里保存的就是对象真正存储的有效信息,也是程序代码中所定义的各种类型的字段内容。无论是从父类继承下 来的,还是在子类中定义的,都需要记录起来。

对齐部分

主要作用是用来提供占位符作用的,保证整个对象是8字节的倍数。因为HotSpot VM的自动内存管理系统要求对象起始地址必须是8字节的整数倍,换句话说,就是对象的大小必须是8字节的整数倍。

字宽:在32位JVM中的长度是32bit,在64位JVM中长度是64bit。