que estoy viendo esto en las especificaciones de Java:java reordenamiento y la memoria modelo
Si x e y son las acciones de la misma rosca y X viene antes y el fin del programa, entonces x sucede antes y.
y también esta
código original
Thread 1
r2 = A;
B = 1;
transformación compilador válido (compiladores se les permite cambiar el orden de las instrucciones, ya sea en hilo, cuando esto no afecta a la ejecución de dicho hilo en forma aislada)
Thread 1
B = 1;
r2 = A;
Estoy confundido con esas dos cosas.
si una acción x viene antes de una acción y luego x debe ocurrir antes de y. si consideramos que r2 = A para xy B = 1 para y, r2 = A debe ocurrir antes que B = 1. ¿Cómo puede haber algún reordenamiento, cómo se ejecuta B = 1 antes de que r2 = A si x sucede antes de que y sea verdadero?
En base a lo que dice el JLS: El JIT decide que un * Sucede antes * no es necesario si no hay dependencia entre dos eventos (si son independientes) ¿no ?. Este párrafo apunta a que las optimizaciones de JIT son correctas. – TheLostMind
@TheLostMind: Bueno, optimizaciones JIT o simplemente el JIT no * eliminación * optimizaciones de CPU –
En ese caso, * eventualmente *, un * sucede antes de que * no exista. Huelo la mano del * análisis de escape * en este: P – TheLostMind