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

时间:2019-10-16 13:20:53

标签: optimization memory hashmap jvm openstreetmap

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

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

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

通常用于

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

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