コードのテストを開始する前に、パフォーマンス テスト スイートの一部として単純な単体テストを使用して、ベース システムが正常で動作することを確認します。通常、この方法でマシンが実際のパフォーマンス テストの実行に適していることを確認します。
このテストを使用して Java 6 と Java 7 を比較すると、Java 7 の実行時間がかなり長くなります。Java 6 では平均 22 秒、Java 7 では 24 秒です。テストはフィボナッチのみを計算するため、ここでは単一スレッドでのバイトコード実行のみが関連し、I/O などは関連しません。
現在、「-server」の有無にかかわらず、32ビットと64ビットの両方のJVMを使用して、Windowsでデフォルト設定で実行しています。すべての実行は、Java 7で同様の低下を示しています。
Java 7 と Java 6 を一致させるには、どのチューニング オプションが適しているでしょうか?
public class BaseLinePerformance {
@Before
public void setup() throws Exception{
fib(46);
}
@Test
public void testBaseLine() throws Exception {
long start = System.currentTimeMillis();
fib(46);
fib(46);
System.out.println("Time: " + (System.currentTimeMillis() - start));
}
public static void fib(final int n) throws Exception {
for (int i = 0; i < n; i++) {
System.out.println("fib(" + i + ") = " + fib2(i));
}
}
public static int fib2(final int n) {
if (n == 0)
return 0;
else if (n == 1)
return 1;
else
return fib2(n - 2) + fib2(n - 1);
}
}
更新:スリープを行わないようにテストを縮小し、How do I write a correct micro-benchmark in Java?の他の提案に従いました。、Java 7 と Java 6 の間にも同じ違いが見られます。コンパイルと GC を出力するための追加の JVM オプションは、実際のテスト中に出力を表示せず、最初のコンパイル情報のみが出力されます。