首页 > 解决方案 > HashMap 将消耗多少大小?

问题描述

我最近在一次采访中被问到一个问题,例如,如果创建一个具有 100 个键值对的 HashMap,它将消耗多少内存..?谁能解释地图中每个条目的消耗量。

标签: javacollectionshashmap

解决方案


这将取决于平台,例如使用压缩选项的 JVM、内存中的对象对齐、散列中的冲突等。除此之外,您还必须包括键和条目的大小,它们是单独的对象。要获得数据结构的实际内存使用情况,您应该检查内存转储,但即便如此,它也并不简单

如果您可以将问题简化为标准的尺寸、容量和负载系数,java.util.HashMap那么:

  • 按照设计,容量始终是 2 的幂,因此大小必须至少为 128。
  • 默认负载因子为 0.75。要以 0.75 的负载因子存储 100 个元素,我们需要容量 256,因为 128 是不够的(128 * 0.75 = 96 < 100)。
  • 因为上面HashMap将存储一个Node[] table大小为 256 以容纳 100 个元素的元素。

推荐阅读