Java对象头结构是怎样的?

2026-05-06 06:450阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1694个文字,预计阅读时间需要7分钟。

Java对象头结构是怎样的?

概述 + 对象头 + 存放:堆对象布局、类型、GC状态、同步状态和识别码的基本信息。Java对象和VM内部对象都共享一个对象头格式。

(后面做详细介绍) + 实例数据 + 存放:类的实例变量数据。

概览


  • 对象头
    存放:关于堆对象的布局、类型、GC状态、同步状态和标识哈希码的基本信息。Java对象和vm内部对象都有一个共同的对象头格式。
    (后面做详细介绍)

  • 实例数据
    存放:类的数据信息,父类的信息,对象字段属性信息。
    如果对象有属性字段,则这里会有数据信息。如果对象无属性字段,则这里就不会有数据。
    根据字段类型的不同占不同的字节,例如boolean类型占1个字节,int类型占4个字节等等;

  • 对齐填充
    存放:为了字节对齐,填充的数据,不是必须的。
    默认情况下,Java虚拟机堆中对象的起始地址需要对齐至8的倍数。
    假如对象头大小为12,实例数据大小为5,最近且大于12+5的8的倍数值是24,则对齐补充大小为:24-12-5=7。


为什么需要对象填充?

字段内存对齐的其中一个原因,是让字段只出现在同一CPU的缓存行中。如果字段不是对齐的,那么就有可能出现跨缓存行的字段。也就是说,该字段的读取可能需要替换两个缓存行,而该字段的存储也会同时污染两个缓存行。这两种情况对程序的执行效率而言都是不利的。其实对其填充的最终目的是为了计算机高效寻址。

阅读全文

本文共计1694个文字,预计阅读时间需要7分钟。

Java对象头结构是怎样的?

概述 + 对象头 + 存放:堆对象布局、类型、GC状态、同步状态和识别码的基本信息。Java对象和VM内部对象都共享一个对象头格式。

(后面做详细介绍) + 实例数据 + 存放:类的实例变量数据。

概览


  • 对象头
    存放:关于堆对象的布局、类型、GC状态、同步状态和标识哈希码的基本信息。Java对象和vm内部对象都有一个共同的对象头格式。
    (后面做详细介绍)

  • 实例数据
    存放:类的数据信息,父类的信息,对象字段属性信息。
    如果对象有属性字段,则这里会有数据信息。如果对象无属性字段,则这里就不会有数据。
    根据字段类型的不同占不同的字节,例如boolean类型占1个字节,int类型占4个字节等等;

  • 对齐填充
    存放:为了字节对齐,填充的数据,不是必须的。
    默认情况下,Java虚拟机堆中对象的起始地址需要对齐至8的倍数。
    假如对象头大小为12,实例数据大小为5,最近且大于12+5的8的倍数值是24,则对齐补充大小为:24-12-5=7。


为什么需要对象填充?

字段内存对齐的其中一个原因,是让字段只出现在同一CPU的缓存行中。如果字段不是对齐的,那么就有可能出现跨缓存行的字段。也就是说,该字段的读取可能需要替换两个缓存行,而该字段的存储也会同时污染两个缓存行。这两种情况对程序的执行效率而言都是不利的。其实对其填充的最终目的是为了计算机高效寻址。

阅读全文