我需要预处理OpenStreetMap中的数据。第一步是从unprocessed.pbf
文件(欧洲,〜21GB)中存储一堆节点(超过2亿个)。因此,我正在使用HashMap。将数据导入地图后,我的程序将检查每个单个Node是否满足某些条件。如果不是,则从地图中删除该节点。之后,映射中的每个剩余节点都将写入新的processed.pbf
文件。
问题是,该程序正在使用100GB以上的RAM。我想优化内存使用率。
我已经阅读过,如果使用了很多条目,我应该调整HashMap的初始容量和负载因子。现在我要问自己,这两个参数的最佳值是什么。
我还已经看到,使用Oracle-JDK JVM(1.8)时的内存加载比使用OpenJDK JVM(1.8)时慢。是否有一些可用于OpenJDK JVM的设置,可以最大程度地减少内存使用?
感谢您的帮助。
如果您在搜索关键字时未提供collision
和load factor
,则哈希图中将有很多initial size
。
通常用于
default load factor = 0.75, we provide a
initial size = ((number of data) / loadFactor) + 1
它提高了代码的效率。由于哈希图具有更多的空间来存储数据,从而减少了搜索关键字时哈希图内部发生的冲突。