October 13th, 2008
순 엉터리 JVM startup time 성능 테스트 for CDS

Java 5 부터 지원되는 class data sharing 기능에 대해 실제 start-up 속도 향상이 있는지 테스트를 해 보았다.

방법은 간단하다. -Xshare:off와 -Xshare:auto를 인자로 각각 1000번씩 VM을 실행시키고 시간을 측정한다.
테스트는 이런데서 했다.
thismac

-Xshare:auto : 94,084ms
-Xshare:off : 116,629ms

최대한 딴 짓안하고 벤치마크에만 집중토록 했지만 신빙성을 위해 한 번 더 했다.(혹시나 해서 순서를 바꿔봤다)

-Xshare:off : 115,580ms
-Xshare:on : 95,641ms

비슷한 결과가 나오니 그냥 믿을란다.
대략 17%~19%의 시작 속도 향상이 있었다.
누가 물으면 이렇게 답하자.

소스는 이렇다.(중간에 하드코딩된 '-Xshare:'뒤의 값을 바꾸고 재컴파일)

JAVA:
  1. package net.hanjava.benchmark;
  2.  
  3. import java.io.IOException;
  4. import javax.swing.JOptionPane;
  5.  
  6. public class BirthToDeath {
  7.     public static void main(String[] args) {
  8.         String bootCount = System.getProperty("boot.count");
  9.         if(bootCount!=null) {
  10.             Runtime rt =Runtime.getRuntime();
  11.             int count = Integer.parseInt(bootCount);
  12.             long before = System.currentTimeMillis();
  13.             for(int i=0;i<count;i++) {
  14.                 try {
  15.                     rt.exec("/usr/bin/java -Xshare:auto -cp /Users/behumble/Documents/workspace/Benchmark/bin net.hanjava.benchmark.BirthToDeath");
  16.                 } catch (IOException e) {
  17.                     e.printStackTrace();
  18.                 }
  19.             }
  20.             long after = System.currentTimeMillis();
  21.             System.err.println("executing "+count+" time(ms) : "+(after-before));
  22.         }
  23.     }
  24. }

P.S) 혹시나 초심자분들 중에 이 말만 철썩같이 믿으시는 분들이 계실까봐.. 사실 정확한 벤치마크는 겁나게 많은 변수가 있고 이 테스트가 충분히 객관적이라고 할 수는 없습니다.