【发布时间】:2016-01-07 11:31:57
【问题描述】:
在测试 Guava ImmutableMap 和 HashMap 时,我发现 ImmutableMap 的大小调整不在常规点,即 16、32、64。这是什么意思?
测试代码:
Map<Integer, Integer> mapFootPrint = new HashMap<Integer, Integer>();
for(int i = 1; i < 1000; i ++){
mapFootPrint.put(i, i+ 128); //no cache integer
ImmutableMap<Integer, Integer> immutableMap = ImmutableMap.copyOf(mapFootPrint);
System.out.println(MemoryMeasurer.measureBytes(mapFootPrint));
System.out.println(MemoryMeasurer.measureBytes(immutableMap));
}
Y 轴是以字节为单位的内存占用,X 轴是映射大小。蓝色是 HashMap,橙色是 ImmutableMap。您可以看到 ImmutableMap 的大小调整比 HashMap 晚。
【问题讨论】: