2012-01-31 7 views
1

간단한 실험은 직렬 간단한 벤치 마크 삽입 찾기 수행 할 때 JDK7 컴파일 HashMap<Integer, Integer> 많은 스레드를 사용하는 것으로 나타났습니다 :의 HashMap와 JDK 7

  1. 삽입 만 번호를.
  2. 수억 개의 숫자를 검색하십시오.

어째서? 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"); 
     } 
} 
+5

멀티 스레딩을 제안하는 증거와 코드를 제공해주십시오. –

+0

@ 루이스 와서 만 : 완료. – Cartesius00

+0

여기에는 멀티 스레딩이라고 믿게하는 증거는 포함되어 있지 않습니다 ... –

답변

2

HashMap 코드가 실제로 여러 Java 스레드를 사용하고 있음을 어떻게 확인 했습니까? 설명을 통해 OS 수준 (예 : Windows 용 작업 관리자)을보고있는 것처럼 들릴 수 있습니다. 이것은 기망적인 것일 수 있습니다. JVM은 가비지 수집 등을 위해 여러 스레드를 사용할 수 있습니다.하지만 실행중인 Java 코드가 다중 스레드를 사용하고있는 것은 아닙니다.

가장 쉬운 방법은 OpenJDK source :-)입니다.

+0

위대한, 아마도 내 질문에 대한 답변. – Cartesius00

0

당신은 오픈 JDK 소스 코드 (이 오픈 소스) 당신이 스레드를 생성하지 않는 HashMap의를 찾을 것 읽는다면.

당신은 어떻게 생각합니까?

+0

CPU가 250 %로드되었으므로 'HashMap'이 아니라 가비지 컬렉터라고 생각합니까? – Cartesius00

관련 문제