ReflectionSizeOf
使用反射的方式计算计算一个实例占用的内存大小就是我上面想到的这种方法。
因为使用反射计算一个实例占用内存大小的根据不同虚拟机的特性是来判断一个实例的各个字段占用的大小以及该实例存储额外信息占用的大小,因而EHCache中采用JvmInformation枚举类型来抽象这种对不同虚拟机实现的不同:
JVM Desc
PointerSize
JavaPointerSize
MinimumObjectSize
ObjectAlignment
ObjectHeaderSize
FieldOffsetAdjustment
AgentSizeOfAdjustment
HotSpot 32-Bit
4
4
8
8
8
0
0
HotSpot 32-Bit with Concurrent Mark-and-Sweep GC
4
4
16
8
8
0
0
HotSpot 64-Bit
8
8
8
8
16
0
0
HotSpot 64-Bit With Concurrent Mark-and-Sweep GC
8
8
24
8
16
0
0
HotSpot 64-Bit with Compressed OOPs
8
4
8
8