【问题标题】:Who consumes more memory, ArrayList or HashSet / LinkedHashSet?谁消耗更多内存,ArrayList 还是 HashSet/LinkedHashSet?
【发布时间】:2018-11-15 16:27:38
【问题描述】:

我有一个非常庞大的集合,所以即使是相对较小的内存差异也会产生影响。

或者差别很小?

当我们添加更多元素时,内存消耗的增长是否不同?

我相信 LinkedHashSet 每 N 个元素消耗的内存比 HashSet 多(用于存储链表链接),但我无法将 ArrayList 与 HashSet 进行比较。

【问题讨论】:

  • ArrayList 每个引用通常使用 4-8 个字节,HashSet 通常使用 ~32 个字节。除非您拥有数亿个值,否则它可能不会像您想象的那么大。
  • 有相当多的集合库旨在比标准 java 集合实现更高效,您可能会发现它们很有用。一些例子是 fastutil、Trove 和 Eclipse Collections

标签: java collections


【解决方案1】:

通常,HashMap 每个条目使用 32 字节(12 字节标头 + 16 字节数据 + 4 字节填充)。它还将使用 4 * 容量字节,所以当一切都说完后,HashMap 对象将占用

32 * size + 4 * capacity bytes

另一方面,ArrayList 通常为每个条目分配 4-8 个字节。但是,如果您分配更大的ArrayList 容量,并且只容纳几个元素,这可能会更多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多