JAVA对象布局
- object header 对象头
- MARKWORD 8BYTE (64位 8BYTE; 32位 4BYTE) 标记字(锁信息)
- KLASS POINTER 8BYTE (64位 8BYTE; 32位 4BYTE) 类指针
- ARRAY LENGTH 8BYTE (64位 8BYTE; 32位 4BYTE) 数组长度(可选)
注:启用+UseCompressedOops开启指针压缩,标记字不压缩,对象头长度为12BYTE,数组头长度为16BYTE。
另外以下指针压缩到4BYTE
- 每个Class的属性指针(即静态变量)
- 每个对象的属性指针(即对象变量)
- 普通对象数组的每个元素指针
- instance data 实例数据
- padding 将对象长度对齐到计算机位宽的整数倍,利于存取效率(64位=8个字节)