对象大小可以用jolcore包查看,本篇介绍jolcore的基本使用
引入依赖
1 2 3 4 5
| <dependency> <groupId>org.openjdk.jol</groupId> <artifactId>jol-core</artifactId> <version>0.9</version> </dependency>
|
具体使用
1 2
| ClassLayout layout = ClassLayout.parseInstance(new Object()); System.out.println(layout.toPrintable());
|
测试代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import org.openjdk.jol.info.ClassLayout; public class JOLSample { public static void main(String[] args) { ClassLayout layout = ClassLayout.parseInstance(new Object()); System.out.println(layout.toPrintable()); System.out.println(); ClassLayout layout1 = ClassLayout.parseInstance(new int[]{1,2,3,4,5}); System.out.println(layout1.toPrintable()); System.out.println(); ClassLayout layout2 = ClassLayout.parseInstance(new A()); System.out.println(layout2.toPrintable()); } public static class A { int id = 6; String name; byte b; Object o; } }
|
打印结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| java.lang.Object 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) 00 1c 2f c5 (00000000 00011100 00101111 11000101) (-986768384) 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666) Instance size: 16 bytes Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
[I 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) 68 0b 2f c5 (01101000 00001011 00101111 11000101) (-986772632) 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666) 16 4 (object header) 05 00 00 00 (00000101 00000000 00000000 00000000) (5) 20 4 (alignment/padding gap) 24 20 int [I.<elements> N/A 44 4 (loss due to the next object alignment) Instance size: 48 bytes Space losses: 4 bytes internal + 4 bytes external = 8 bytes total
com.locaris.jvm.JOLSample$A 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) 10 f6 9c c5 (00010000 11110110 10011100 11000101) (-979569136) 12 4 (object header) 9a 02 00 00 (10011010 00000010 00000000 00000000) (666) 16 4 int A.id 6 20 1 byte A.b 0 21 3 (alignment/padding gap) 24 8 java.lang.String A.name null 32 8 java.lang.Object A.o null Instance size: 40 bytes Space losses: 3 bytes internal + 0 bytes external = 3 bytes total
|