java map大量数据,java-处理大型HashMap的内存有效方式

这篇博客探讨了在处理大量数据时如何有效地管理Java HashMap的内存。作者提出两种策略:一是设置HashMap的初始容量以减少 resize 操作,二是每次迭代时重新初始化HashMap以适应不同大小的数据集。实验结果显示,设定初始容量和负载因子能显著降低内存消耗。此外,文章建议考虑使用Java的不同版本,因为不同版本的HashMap可能有不同的内存开销和性能表现。
摘要由CSDN通过智能技术生成

我的项目正在处理正在写入excel文件的大量数据.我将此数据以Map< List< String&gt ;, Integer>的形式存储在静态HashMap中,其中列表的大小仅为3.但是,Map中的条目数可以在0到11,300之间变化.

该项目的流程为:

>使用条目加载地图

>迭代地图并执行操作

>清除地图以查找下一组条目

我最近发现的有关HashMap的信息是,当违反设置的大小时,它将如何重新调整大小.因此,不仅我的地图会不断调整其大小,而且到我清除最大的一组条目时,它很可能会有大约20,000个空条目.

因此,我正在尝试对该事物进行微优化,而在执行此操作时遇到了两难选择.我的两个想法是:

>将初始HashMap的默认值设置为一个值,该值最多只能调整一次

>使用每个新条目集的预期平均大小重新初始化HashMap,以限制重新调整大小并允许垃圾收集器进行一些清理

我的直觉告诉我,选项2可能是最合理的选择,但这仍然可以证明需要根据下一个条目集进行大量调整.但是,选项一极大地限制了一次操作的大小调整,但是实际上留下了成千上万个空条目.

我提出的两个解决方案中的一个是否比另一个更好,两者之间的内存改进没有太大区别,还是我可以监督其他解决方案(不涉及更改数据结构)?

编辑:仅在某些情况下,我想这样做,因为项目偶尔会用完堆内存,并且我试图确定此巨大映射的影响程度是多少.

EDIT2:只是为了澄清,地图本身的大小是较大的值.密钥大小(即列表)永远只有3.

解决方法:

最后一个标题与调整大小有关,指出HashMap的默认大小为16,factorLoad为0.75.

您可以在初始化时更改这些值,因此大小为11300,factorLoad为1,这意味着在满足您的最大值之前,地图的大小不会增加,就您而言,据我所知,它将永远不会增加

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值