java - HashMap 将消耗多少大小?
问题描述
我最近在一次采访中被问到一个问题,例如,如果创建一个具有 100 个键值对的 HashMap,它将消耗多少内存..?谁能解释地图中每个条目的消耗量。
解决方案
这将取决于平台,例如使用压缩选项的 JVM、内存中的对象对齐、散列中的冲突等。除此之外,您还必须包括键和条目的大小,它们是单独的对象。要获得数据结构的实际内存使用情况,您应该检查内存转储,但即便如此,它也并不简单。
如果您可以将问题简化为标准的尺寸、容量和负载系数,java.util.HashMap
那么:
- 按照设计,容量始终是 2 的幂,因此大小必须至少为 128。
- 默认负载因子为 0.75。要以 0.75 的负载因子存储 100 个元素,我们需要容量 256,因为 128 是不够的(128 * 0.75 = 96 < 100)。
- 因为上面
HashMap
将存储一个Node[] table
大小为 256 以容纳 100 个元素的元素。
推荐阅读
- java - Eclipse 安装程序不显示任何包
- python - 如何在 fsolve 中包含可调参数?
- nodes - maxmindclient 如果因资金不足而被拒绝
- sql-server - 无法在 SQL Server 中使用参数 PASSWORD 进行 Windows 登录
- excel - 如何检查一系列列并取其值,检查每组 10 个中的第一个、第二个和第七个?
- wpf - WPF DoDragDrop 不偶尔返回并挂起应用程序
- c# - Blazor 处理复选框切换
- java - 如何避免 Java ExecutorService 中的上下文切换
- performance - JMeter压力有时无法停止线程
- javascript - 如何在 iframe 中将父 url 作为 React 应用程序进行交互