HashMap 会占多少系统内存

本文通过实验探讨了HashMap在不同元素数量下的内存占用情况。当HashMap为空及分别添加不同数量元素时,发现HashMap所占内存与其元素数量成正相关,且存在临界值,大约在6400个元素时内存翻倍。总结出内存占用公式:M = 1342200 * (Math.ceil(N/6400)),此结论具有一定准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

话不多说, 先给大家看段代码, 如果嫌麻烦, 可以直接跳到末尾看结论.

    public static void main(String[] args) {
        long start = 0;
        long end = 0;
        // 获取虚拟机运行时空闲内存 
        start = Runtime.getRuntime().freeMemory();
        // 创建一个 HashMap 对象, 同理也可以测试 List , Set 以及 数组  
        HashMap<String, Integer> map = new HashMap<>();
        // 添加元素
        for (int i = 0; i < 8000; i++) {
            map.put("test"+i, i*i);
        }
        // 获取添加元素后, 虚拟机运行时的空闲内存 .
        end = Runtime.getRuntime().freeMemory();
        // 结论
        System.out.println("HashMap 共占内存 " + (start - end) + " 个字节.");
    }

1.当HashMap为空时, 不添加任何元素的时候.

/*for (int i = 0; i < 8000; i++) {
            map.put("test"+i, i*i);
        }*/

运行结果为:

HashMap 共占内存 0 个字节.

2. 在 HashMap 不为空的时候 , 分别添加 1 个元素, 10 个元素 , 100 个元素 , 1000 个 元素 , 1000 个元素 的时候.

        // 1 个元素的时候 HashMap 共占内存 0 或 1342200 个字节 .
        // 10 个元素的时候 HashMap 共占内存 0 或 1342200 个字节 .
        // 100 个元素的时候 HashMap 共占内存 1342200 个字节 .
        // 1000 个元素的时候 HashMap 共占内存 1342200 个字节 .
        // 10000 个元素的时候 HashMap 共占内存 2684376 个字节 .
        for (int i = 0; i < 10000 ; i++) {
            map.put("test"+i, i*i);
        }

3. 测试其具体临界值, 第一次所占内存翻倍

当元素个数为 6400 的时候

for (int i = 0; i < 6400 ; i++) {
            map.put("test"+i, i*i);
        }

## 所占系统内存为

HashMap 共占内存 1342200 个字节.

当元素个数为 6500 的时候

for (int i = 0; i < 6500 ; i++) {
            map.put("test"+i, i*i);
        }

## 所占系统内存为

HashMap 共占内存 2684400 个字节.

最后结论 : HashMap 运行时所占内存 Memory(M) 与元素 Node(N) 成正相关关系, 基本公式 : M = 1342200 * (Math.ceil(N/6400)) , 结果保证相对正确 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值