与关联的开销很大
Multimap。最低限度:
- 每个键和值都是一个
Integer
对象,它(至少)使每个int
值的存储需求增加了一倍。 - 中的每个唯一键值
HashMultimap
都与aCollection
的值相关联(根据source,Collection
a为aHashset
)。 - 每个
Hashset
都使用8个值的默认空间创建。
因此,每个键/值对所需的空间(至少)可能比您对两个
int值的预期要大一个数量级。(将多个值存储在单个键下的情况要少得多。)我希望1000万个键/值对可能占用400MB。
尽管您有2.5GB的堆空间,但如果这还不够的话,我不会感到惊讶。我认为上述估算值偏低。另外,它仅说明构建地图后需要存储多少存储空间。随着地图的增长,需要重新分配和重新整理表,这至少会暂时使使用的空间量增加一倍。最后,所有这些都假定
int值和对象引用需要4个字节。如果JVM使用64位寻址,则字节数可能加倍。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)