普通对象的存储布局:
-
对象头 markword
- 线程锁状态 ,一共有四种状态 :
- 无锁
- 偏向锁
- 自旋锁
- 重量锁
- GC 年代信息
- 对象的hashCode;
- 线程锁状态 ,一共有四种状态 :
类型指针 :
指向它的类元数据,JVM通过这个指针来确定对象是那个类的实例
实例数据 :
对象真正存储的有效信息,也是在程序代码中所定义的各种类型的字段内容。无论是从父类继承下来的,还是在子类中定义的,都需要记录起来。
Padding对齐(缓存行对齐):
用于填充内容
为什么需要缓存行对齐?
Hotspot要求对象起始地址必须是8个字节的整数倍,也就是说对象的大小必须是8个字节的整数倍
这样做的好处是什么?
能提高运行速度 ,如果数据未对齐,则在加载内存后,处理器需要进行一些移位才能访问它。
此外,最小分配单元的大小越大,垃圾收集就越容易简化