深入浅出JAVA对象内容

普通对象的存储布局:

  1. 对象头 markword 

    1. 线程锁状态 ,一共有四种状态 : 
      1. 无锁
      2. 偏向锁
      3. 自旋锁
      4. 重量锁
    2. GC 年代信息
    3. 对象的hashCode; 

类型指针 :

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

实例数据 :

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

Padding对齐(缓存行对齐):

用于填充内容 

为什么需要缓存行对齐?

Hotspot要求对象起始地址必须是8个字节的整数倍,也就是说对象的大小必须是8个字节的整数倍

这样做的好处是什么?

能提高运行速度 ,如果数据未对齐,则在加载内存后,处理器需要进行一些移位才能访问它。

此外,最小分配单元的大小越大,垃圾收集就越容易简化

猜你喜欢

转载自blog.csdn.net/qq_31967241/article/details/107548671