Guava ImmutableMap推迟Map调整大小?

时间:2015-10-09 13:30:14

标签: java hashmap guava

当我测试Guava ImmutableMap和HashMap时,我发现ImmutableMap不是在常规点调整大小,也就是16,32,64。这是什么意思?

测试代码:

var target = targetSheet.getRange(targetSheet.getLastRow() + 1, numColumns);

结果图: enter image description here

Y轴是以字节为单位的内存占用量,X轴是地图大小。 Blue是HashMap,Orange是ImmutableMap。你可以看到ImmutableMap的调整大于HashMap。

1 个答案:

答案 0 :(得分:4)

这只是一个不同的加载因子 - 正常HashMap为1.33,ImmutableMap为1.2。所有散列映射都具有可用空间,因为散列从来都不是完美的,可变映射需要额外的空间用于潜在的新条目。看看番石榴com.google.common.collect.Hashing.closedTableSize(),番石榴com.google.common.collect.RegularImmutableMap.MAX_LOAD_FACTORjava.util.HashMap.DEFAULT_LOAD_FACTOR