简单的实验表明,JDK7
编译HashMap<Integer, Integer>
在执行简单的串行插入 - 查找基准时使用了许多线程:
为什么? JDK7自动猜测如何并行化这段代码???我需要对单线程行为进行基准测试,我该怎么做?
代码,加载了大约2.5个核心:
import java.util.*;
public class HashSpeed {
public static void main(String[] args)
{
HashMap<Integer, Integer> m = new HashMap<Integer, Integer>(10000);
final int N = 10000000;
for (int i=1; i<N; i+=2)
m.put(i, i);
for (int j=0; j<10; j++) {
for (int i=0; i<N; i++) {
if (m.get(i) != null != (i%2==1)) {
System.out.println("failed");
}
}
}
System.out.println("TEST OK");
}
}
答案 0 :(得分:2)
您如何验证HashMap
代码实际上是否正在使用多个Java线程?从您的描述中,听起来您正在查看操作系统级别(例如Windows的任务管理器)。这可能具有欺骗性。 JVM 可以使用多个线程,例如垃圾收集等。但这并不意味着您运行的Java代码使用多个线程。
最简单的方法是查看OpenJDK source: - 。
答案 1 :(得分:0)
如果您阅读了openjdk源代码(它的开源代码),您会发现HashMap不会创建线程。
是什么让你认为它呢?