当我测试Guava ImmutableMap和HashMap时,我发现ImmutableMap不是在常规点调整大小,也就是16,32,64。这是什么意思?
测试代码:
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, numColumns);
Y轴是以字节为单位的内存占用量,X轴是地图大小。 Blue是HashMap,Orange是ImmutableMap。你可以看到ImmutableMap的调整大于HashMap。
答案 0 :(得分:4)
这只是一个不同的加载因子 - 正常HashMap
为1.33,ImmutableMap
为1.2。所有散列映射都具有可用空间,因为散列从来都不是完美的,可变映射需要额外的空间用于潜在的新条目。看看番石榴com.google.common.collect.Hashing.closedTableSize()
,番石榴com.google.common.collect.RegularImmutableMap.MAX_LOAD_FACTOR
和java.util.HashMap.DEFAULT_LOAD_FACTOR
。