LoginSignup
0
0

More than 3 years have passed since last update.

VM引数を変更しつつマイクロベンチマークする方法

Posted at

VM引数を変更しながら、マイクロベンチマークを取りたいケースってあると思うのですが、
JITコンパイラに影響のある引数の場合、ただプログラムを実行して時間を計測するのみでは
うまくその影響を測れません。なぜなら、プログラムの実行中にVMが判断したタイミングでJITコンパイラが走りコードが最適化されるので、どの程度そのVM引数の変更の効果があったのか測れないからです。

JMH の利用

このようなケースでは、ベンチマークツールである JMH を使用するのが便利です。
JMH の使用方法についてはこちらのの記事で説明されていますので、以降では、JMHでのベンチマークの際にVM引数を指定する方法を説明します。

VM引数の指定方法

以下のようにベンチマークを行うメソッドにForkアノテーションを付与し、JvmArgsAppend属性を利用することによってVM引数を指定することができます。
この例では、「-XX:-Inline」を指定ています。

    @Benchmark
    @Fork(jvmArgsAppend = "-XX:-Inline") // アノテーションでVM引数を指定する
    public String インライン展開なし() {
        return execute();
    }

また、以下のように実装することによって、VM引数の有り無しを同時にベンチマークすることができます。

    @Benchmark
    public String インライン展開あり() {
        return execute();
    }

    @Benchmark
    @Fork(jvmArgsAppend = "-XX:-Inline") // アノテーションでVM引数を指定する
    public String インライン展開なし() {
        return execute();
    }
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0