LoginSignup
1
0

More than 3 years have passed since last update.

Java volatileを使用した際の性能影響について検証

Last updated at Posted at 2020-05-24

概要

volatileを使用した際の性能影響について検証したメモページ。

volatileとは

フィールドに付ける修飾子。
マルチスレッドのプログラムの場合に、スレッドがフィールドの値をキャッシュする可能性がある。
volatileを付けると、キャッシュの対象外にすることができる。
(本ページではvolatileの役割についての詳細は割愛。)

性能検証

性能検証に使用した環境

マシンスペック
CPU:Intel(R) Core(TM) i5-2400S CPU
RAM:8GB
OS:windows10 64ビット

実行環境
Eclipse(2020-03 (4.15.0))
Java8

volatileを使用した場合の性能

volatileを付与した状態で、int型のフィールドを1億回カウントアップする処理の時間を計測。

    private volatile int cnt = 0;

    private long exe() {

        long start = System.currentTimeMillis();

        for (int i = 0; i < 100000000; i++) {
            this.cnt++;
        }

        long end = System.currentTimeMillis();

        return end - start;
    }

上記のコードでの計測を10回実施し、平均値を取得。

結果
平均値:964ms

volatileを使用しない場合の性能

上記のコードから、フィールドをvolatileを使用しない形に変更。

    private int cnt = 0;

同様に計測を10回実施し、平均値を取得。

結果
平均値:7ms

まとめ

volatileを使用した場合のほうが性能が悪くなるが、1億回カウントアップで上記程度の時間であるため、ほとんどの場合は影響なさそう。

1
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
1
0