widzę tego w specyfikacji Java:java zmiana kolejności i pamięć modelu
Jeśli X i Y są akcje tego samego wątku, ax jest przed rw celu programu, a następnie x dzieje przed y.
oraz tym
oryginalny kod
gwintu 1
R2 = A;
B = 1;
ważne transformacji kompilator (kompilatory mogą zmieniać kolejność instrukcji w obu nici, gdy nie ma to wpływu na wykonanie tego gwintu w izolacji)
wątku 1
B = 1;
r2 = A;
Jestem zdezorientowany z tych dwóch rzeczy.
jeśli akcja x pojawia się przed akcją y, wtedy x powinno się zdarzyć przed y. jeśli weźmiemy pod uwagę r2 = A dla xi B = 1 dla y, r2 = A powinno się zdarzyć przed B = 1. W jaki sposób może nastąpić zmiana kolejności, w jaki sposób B = 1 jest wykonywane przed r2 = A, jeśli x ma miejsce, zanim y jest prawdziwe ?.
Na podstawie tego, co mówi JLS: JIT decyduje, że * Zdarza się przed * nie jest potrzebna, jeśli nie ma zależności między dwoma zdarzeniami (jeśli są niezależne) w prawo ?. Ten akapit wskazuje na poprawne optymalizacje JIT? – TheLostMind
@ TheLostMind: Cóż, albo optymalizacje JIT, albo tylko JIT nie * usuwanie * optymalizacje procesora –
W takim przypadku, * ostatecznie *, a * dzieje się wcześniej * nie istnieje. Czuję w tym fragmencie * analizę ucieczki *: P – TheLostMind