繁体   English   中英

优化 memory 使用非常大的 HashMap

[英]Optimize memory usage of very large HashMap

我需要预处理来自 OpenStreetMap 的数据。 第一步是从一个unprocessed.pbf的.pbf 文件(欧洲,~21GB)中存储一堆节点(超过 2 亿个)。 因此,我使用的是 HashMap。 将数据导入 map 后,我的程序会检查每个节点是否满足某些条件。 如果不是,则从 map 中删除该节点。 然后将 map 中的每个剩余节点写入新的已processed.pbf的.pbf 文件。

问题是,这个程序使用了超过 100GB 的 RAM。 我想优化 memory 的使用。

我已经读过,如果使用了许多条目,我应该调整 HashMap 的初始容量和负载因子。 现在我问自己这两个参数的最佳值。

我还看到,使用 Oracle-JDK (1.8) 的 JVM 时,memory 的负载比使用 OpenJDK JVM (1.8) 的速度慢。 是否有一些设置可用于 OpenJDK JVM,以尽量减少 memory 的使用?

谢谢你的帮助。

hashmap 如果在搜索密钥时不提供load factorinitial size ,将会发生很多collision

一般来说,

default load factor = 0.75, we provide a 
initial size = ((number of data) / loadFactor) + 1

它提高了代码的效率。 由于 hashmap 有更多空间来存储数据,从而减少了在搜索密钥时 hashmap 内部发生的冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM