优化非常大的HashMap的内存使用情况

问题描述 投票:0回答:1

我需要预处理OpenStreetMap中的数据。第一步是从unprocessed.pbf文件(欧洲,〜21GB)中存储一堆节点(超过2亿个)。因此,我正在使用HashMap。将数据导入地图后,我的程序将检查每个单个Node是否满足某些条件。如果不是,则从地图中删除该节点。之后,映射中的每个剩余节点都将写入新的processed.pbf文件。

问题是,该程序正在使用100GB以上的RAM。我想优化内存使用率。

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

我还已经看到,使用Oracle-JDK JVM(1.8)时的内存加载比使用OpenJDK JVM(1.8)时慢。是否有一些可用于OpenJDK JVM的设置,可以最大程度地减少内存使用?

感谢您的帮助。

optimization memory hashmap jvm openstreetmap
1个回答
0
投票

如果您在搜索关键字时未提供collisionload factor,则哈希图中将有很多initial size

通常用于

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

它提高了代码的效率。由于哈希图具有更多的空间来存储数据,从而减少了搜索关键字时哈希图内部发生的冲突。

© www.soinside.com 2019 - 2024. All rights reserved.