public static void main(String[] args) {
int size = 10;
List<Integer> list = new ArrayList<Integer>(size);
for (int i = 0; i < size; i++) {
list.add(i);
}
//虛擬機信息
out.println(VMSupport.vmDetails());
//打印類內部的佔用
out.println(ClassLayout.parseClass(ArrayList.class).toPrintable());
//打印實例內部的佔用
out.println(ClassLayout.parseClass(ArrayList.class).toPrintable(list));
//打印實例外部的佔用
out.println(GraphLayout.parseInstance(list).toPrintable());
//打印實例各個依賴的佔用,並彙總
out.println(GraphLayout.parseInstance(list).toFootprint());
}
Running 64-bit HotSpot VM.
Using compressed references with 3-bit shift.
Objects are 8 bytes aligned.
Field sizes by type: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
Array element sizes: 4, 1, 1, 2, 2, 4, 4, 8, 8 [bytes]
java.util.ArrayList object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 12 (object header) N/A
12 4 int AbstractList.modCount N/A
16 4 int ArrayList.size N/A
20 4 Object[] ArrayList.elementData N/A
Instance size: 24 bytes (estimated, the sample instance is not available)
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
java.util.ArrayList object internals:
OFFSET SIZE TYPE DESCRIPTION VALUE
0 4 (object header) 19 00 00 00 (0001 1001 0000 0000 0000 0000 0000 0000)
4 4 (object header) 00 00 00 00 (0000 0000 0000 0000 0000 0000 0000 0000)
8 4 (object header) 31 32 00 f8 (0011 0001 0011 0010 0000 0000 1111 1000)
12 4 int AbstractList.modCount 10
16 4 int ArrayList.size 10
20 4 Object[] ArrayList.elementData [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Instance size: 24 bytes (estimated, add this JAR via -javaagent: to get accurate result)
Space losses: 0 bytes internal + 0 bytes external = 0 bytes total
java.util.ArrayList object externals:
ADDRESS SIZE TYPE PATH VALUE
74002ca98 16 java.lang.Integer .elementData[9] 9
74002caa8 16 java.lang.Integer .elementData[8] 8
74002cab8 16 java.lang.Integer .elementData[7] 7
74002cac8 16 java.lang.Integer .elementData[6] 6
74002cad8 16 java.lang.Integer .elementData[5] 5
74002cae8 16 java.lang.Integer .elementData[4] 4
74002caf8 16 java.lang.Integer .elementData[3] 3
74002cb08 16 java.lang.Integer .elementData[2] 2
74002cb18 16 java.lang.Integer .elementData[1] 1
74002cb28 16 java.lang.Integer .elementData[0] 0
74002cb38 491560 (something else) (somewhere else) (something else)
7400a4b60 56 [Ljava.lang.Object; .elementData [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
7400a4b98 1432458504 (something else) (somewhere else) (something else)
7956be0a0 24 java.util.ArrayList (object)
java.util.ArrayList instance footprint:
COUNT AVG SUM DESCRIPTION
1 56 56 [Ljava.lang.Object;
10 16 160 java.lang.Integer
1 24 24 java.util.ArrayList
12 240 (total)
http://bboniao.com/openjdk/2014-06/java-object-layoutjol.html