7
我看到這個在Java規格:java的排序和內存模型
如果X和Y是相同的線程和x的行動來之前在程序順序y,則x和y之前發生。
和也在本
原始代碼
線程1
R2 = A;
B = 1;
有效編譯器變換(編譯器被允許重新排序在任一線程的指令,當這不影響在隔離該線程的執行)
線程1
B = 1;
r2 = A;
我對這兩件事感到困惑。
如果動作x出現在動作y之前,那麼x應該在y之前發生。如果我們認爲r2 = A代表x,B = 1代表y,r2 = A應該在B = 1之前發生。怎麼可能有任何重新排序,如果x在y爲真之前發生,在r2 = A之前如何執行B = 1?
根據JLS的說法:JIT決定如果兩個事件之間沒有依賴關係(如果它們是獨立的),則不需要*之前發生*。該段落指出JIT優化是否正確? – TheLostMind
@TheLostMind:那麼,無論是JIT優化還是隻是JIT不會*刪除* CPU優化 –
在這種情況下,*最終*,a *發生在*不存在之前。我在這裏聞到* escape分析的手:P – TheLostMind