HashMap和JDK 7

时间:2012-01-31 22:18:23

标签: java multithreading hashmap java-7

简单的实验表明,JDK7编译HashMap<Integer, Integer>在执行简单的串行插入 - 查找基准时使用了许多线程:

  1. 插入数百万个数字。
  2. 搜索数亿个数字。
  3. 为什么? 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");
            }
    }
    

2 个答案:

答案 0 :(得分:2)

您如何验证HashMap代码实际上是否正在使用多个Java线程?从您的描述中,听起来您正在查看操作系统级别(例如Windows的任务管理器)。这可能具有欺骗性。 JVM 可以使用多个线程,例如垃圾收集等。但这并不意味着您运行的Java代码使用多个线程。

最简单的方法是查看OpenJDK source: - 。

答案 1 :(得分:0)

如果您阅读了openjdk源代码(它的开源代码),您会发现HashMap不会创建线程。

是什么让你认为它呢?