Java言語は、再順序付けによってコードの意味に違いがない限り、コンパイラがコンパイルされたコードの行を再配置できることはよく知られています。しかし、コンパイラは、現在のスレッドから見たように、sematicsについてのみ気にする必要があります。Javaメモリモデル:コンパイラ再編成コード行
コンパイラにこのFREEDMを可能にすることによって、何を達成している。この再注文は、マルチスレッド状況で意味論に影響を与える場合、それは通常、並行性の問題(メモリの可視性)
私の質問(複数可)が原因?コンパイラがコードを再配置することでより効率的なコードを生成することは本当に可能ですか?私はまだこれについて実用的なケースを見ています。私は時々、これがもたらすことができる並行性のリスクよりはるかに大きな利点があると感じています。
プログラマがこのような行を並べ替えないようにコンパイラに指示する方法はありますか?私は、同期プリミティブを使用することは効果的に並べ替えの副作用を処理することを知っていますが、これをオフにする直接的な方法(コンパイラオプション)があるかどうか尋ねていますか?
これでCPUの再注文手順が停止することはありません。 ;) –
そして、あなたのプログラムは本当に遅くなります。だから、プロダクションでの使用に便利なオプションではありません。 – Jesper