内存布局
总计(byte):(m+c+f+p+l)%8=0
1、mark word->m
2、class对象指针->c
3、类字段->f
4、补齐位->p
5、如果是数组还有数组长度->l
引入依赖
<dependency>
<groupId>org.openjdk.jol</groupId>
<artifactId>jol-core</artifactId>
<version>0.9</version>
</dependency>
测试案列
排序规则一
M=MarkWord
C=类型指针
I=数组长度
计算公式(M+C+I)%=0
类字段排列规则按照先基本类型,后引用类型,大的在前,小的在后,最后按声明顺序排列。从长到短排列,引用排最后: long/double --> int/float --> short/char --> byte/boolean --> Reference
关闭指针压缩
package com;
import org.openjdk.jol.info.ClassLayout;
public class TestClass {
private String str;
private long l;
private int i;
private byte b;
private short s;
public static void main(String[] args) {
TestClass testClass = new TestClass();
System.out.println(ClassLayout.parseInstance(testClass).toPrintable());
}
}
com.TestClass object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 01 00 00 00 (00000001 00000000 00000000 00000000) (1)
4 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
8 4 (object header) 28 30 dd 16 (00101000 00110000 11011101 00010110) (383594536)
12 4 (object header) 00 00 00 00 (00000000 00000000 00000000 00000000) (0)
16