众所周知,Java 语言允许编译器重新排列已编译代码的行,只要重新排序对代码语义没有影响。然而,编译器只需要关心从当前线程看到的语义。如果这种重新排序影响多线程情况下的语义,通常会导致并发问题(内存可见性)
我的问题:
允许编译器释放这个 freedm 可以实现什么?编译器真的有可能通过重新排列代码来生成更高效的代码吗?我还没有看到一个实际的案例。我有时觉得,如果有的话,它可能带来的并发风险远远超过了好处。
程序员有什么办法可以告诉编译器不要像这样重新排列行?我知道使用同步原语有效地处理重新排列的副作用,但我问是否有任何直接的方法(编译器选项)来关闭它?