Relación entre las instrucciones de bytecode y las operaciones del procesador

La especificación de Java garantiza que las asignaciones de variables primitivas son siempre atómicas (esperar paralong y dobletypes.

De lo contrario,Fetch-and-Add Operación correspondiente a la famosai++ la operación de incremento, sería no atómica porque conduciría a una operación de lectura-modificación-escritura.

Asumiendo este código:

public void assign(int b) {
    int a = b;
}

El bytecode generado es:

public void assign(int);
    Code:
       0: iload_1       
       1: istore_2      
       2: return 

Así, vemos que la asignación está compuesta pordos Pasos (carga y almacenamiento).

Asumiendo este código:

public void assign(int b) {
        int i = b++;
}

Bytecode:

public void assign(int);
    Code:
       0: iload_1       
       1: iinc          1, 1    //extra step here regarding the previous sample
       4: istore_2      
       5: return 

Sabiendo que el procesador X86 puede (al menos los modernos), opera la operación de incremento atómicamente, como se dice:

En ciencias de la computación, la instrucción de extracción y adición de la CPU es una instrucción especial que modifica de forma atómica el contenido de una ubicación de memoria. Se utiliza para implementar la exclusión mutua y algoritmos concurrentes en sistemas multiprocesador, una generalización de semáforos.

Así, la primera pregunta: A pesar del hecho de que el bytecode requiere ambos pasos (carga y almacenamiento), ¿Java confía en el hecho de que la operación de asignación es una operación que siempre se realiza de forma atómica, independientemente de la arquitectura del procesador y, por lo tanto, puede garantizar una atomicidad permanente (para asignaciones primitivas) en su especificación?

Segunda pregunta: ¿Es incorrecto confirmar que con un procesador X86 muy moderno y sin compartir el código compilado en diferentes arquitecturas, no hay necesidad de sincronizar eli++ operación (oAtomicInteger)? Teniéndolo en cuenta ya atómico.

Respuestas a la pregunta(3)

Su respuesta a la pregunta