1
リフレクションでJIT最適化を打ち破る
並行性の高いシングルトンクラスのユニットテストをいじるとき、次の奇妙な動作に遭遇しました(JDK 1.8.0_162でテスト済み)。 private static class SingletonClass { static final SingletonClass INSTANCE = new SingletonClass(0); final int value; static SingletonClass getInstance() { return INSTANCE; } SingletonClass(int value) { this.value = value; } } public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { System.out.println(SingletonClass.getInstance().value); // 0 // Change the instance to a …