Modelo de memória Java: compilador reorganizando as linhas de código

É sabido que a linguagem Java permite que os compliers reorganizem linhas de código compilado, desde que a reordenação não faça diferença na semântica do código. No entanto, é necessário que o compilador se preocupe apenas com a semântica, conforme visto no thread atual. Se essa nova ordem afeta a semântica em uma situação multithread, geralmente causa problemas de simultaneidade (visibilidade da memória)

Minhas perguntas)

O que é alcançado ao permitir esse freedm ao compilador? É realmente possível para o compilador produzir código que seja mais eficiente, reorganizando o código? Ainda estou para ver um caso prático para isso. Às vezes, sinto que os benefícios, se houver, são superados pelos riscos de concorrência que isso pode traze

Existe alguma maneira de o programador dizer ao compilador para não reorganizar linhas como esta? Eu sei que o uso de primitivas de sincronização efetivamente lida com os efeitos colaterais da reorganização, mas estou perguntando se existe alguma maneira direta (opção do compilador) de desativar iss

questionAnswers(3)

yourAnswerToTheQuestion