【发布时间】:2015-04-08 15:02:30
【问题描述】:
我想使用HashSet<Long> 在内存中存储大量唯一数字。我计算了要消耗的近似内存(以 64 位指针大小):
Long 将占用 16 个字节的空间。所以最初我将条目数乘以 16 来获得内存。但实际上,每个条目的内存远超过 16 个字节。之后我研究了HashSet 的实现。简而言之,在底层实现中,它实际上与 hashset 的每个条目一起存储了一个额外的虚拟对象(12 个字节)。以及指向下一个条目的指针(8 个字节)。从而让出每个条目额外的 12+8 字节。
所以每个条目的总内存:16+12+8 = 36 字节。但是当我运行代码并检查内存时,每个条目仍然远远超过 36 个字节。
我的问题(简而言之):HashSet 占用多少内存(例如,在 64 位机器上)?
【问题讨论】:
-
你忘了考虑容量。
-
您似乎也忘记了 JVM 内存使用情况
-
"Long 会占用 16 个字节的空间。"为什么? stackoverflow.com/questions/9037468/…
-
@nafas 阅读那篇文章,但它仍然没有解释为什么它将 32 与 size 相乘,然后将 4 与容量相乘。
标签: java data-structures hashset