gpt4 book ai didi

java - 为什么 Java HashMap 变慢了?

转载 作者:行者123 更新时间:2023-12-03 19:11:34 34 4
gpt4 key购买 nike

我尝试用一​​个文件的内容构建一个 map ,我的代码如下:

    System.out.println("begin to build the sns map....");
String basePath = PropertyReader.getProp("oldbasepath");
String pathname = basePath + "\\user_sns.txt";
FileReader fr;
Map<Integer, List<Integer>> snsMap =
new HashMap<Integer, List<Integer>>(2000000);
try {
fr = new FileReader(pathname);
BufferedReader br = new BufferedReader(fr);
String line;
int i = 1;
while ((line = br.readLine()) != null) {
System.out.println("line number: " + i);
i++;

String[] strs = line.split("\t");
int key = Integer.parseInt(strs[0]);
int value = Integer.parseInt(strs[1]);
List<Integer> list = snsMap.get(key);
//if the follower is not in the map
if(snsMap.get(key) == null)
list = new LinkedList<Integer>();
list.add(value);
snsMap.put(key, list);
System.out.println("map size: " + snsMap.size());
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("finish building the sns map....");
return snsMap;

该程序起初非常快,但当打印的信息是:

 map size: 1138338
line number: 30923602
map size: 1138338
line number: 30923603
....

我尝试用两个 System.out.println() 子句来判断 BufferedReader 和 HashMap 的性能而不是 Java 分析器。有的时候获取到行号信息后需要一段时间才能获取到 map 大小的信息,有的时候获取到 map 大小后需要一段时间才能获取到行号信息的信息。我的问题是:这让我的程序变慢了?大文件的 BufferedReader 还是大 map 的 HashMap?

最佳答案

如果您从 Eclipse 内部对此进行测试,您应该意识到写入 stdout/stderr 的巨大性能损失,因为 Eclipse 在控制台 View 中捕获该输出。在紧密循环内打印始终是一个性能问题,即使在 Eclipse 之外也是如此。

但是,如果您提示的是处理 3000 万行后速度变慢,那么我敢打赌这是内存问题。首先,由于频繁的 GC'ing,它变慢了,然后它因 OutOfMemoryError 而中断。

关于java - 为什么 Java HashMap 变慢了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10634483/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com