Мне наконец-то удалось наблюдать переупорядочение в исходном тесте jcstress с явными опциями JVM и запуск его с большим количеством часов.
java -jar target / jcstress.jar -f 20 -XX: -TieredCompilation, -XX: + UnlockDiagnosticVMOptions, -XX: + StressLCM, -XX: + StressGCM
Однако в одном из следующих тестов переупорядочение никогда не наблюдается, независимо от того, как долго я запускаю тестирование, хотя оно выглядит эквивалентно другим тестам.
// reordering can be observed!
@Actor
public void actor1() {
int ee = e; // Load
d = 1; // Store
if (ee == 2) {
f = 2;
}
}
// reordering can be observed!
@Actor
public void actor1() {
f = e; // Load & Store
d = 1; // Store
}
// reordering NEVER observed!
@Actor
public void actor1() {
if (e == 2) f = 2; // Load & conditionally Store
d = 1; // Store
}