By doing this, it makes it possible to reason about code execution in a multithreaded environment, even in the face of optimizations performed by the dynamic compiler, the processor(s), and the caches.
최적화 기법은 컴파일 타임의 reordering이 될수도 있고, 변수의 저장 공간에 CPU cache가 쓰일수도 있음.. Effective Java에서는 전자만을 오히려 이야기. 'OpenJDK 서버 VM이 실제로 적용하는 끌어올리기(hoisting)라는 최적화 기법이다.'
- JDK 구현체에서 결과적으로 thread 별 working memory에서 CPU cache를 쓸 수도 있지만, 그것이 명세로서 보장된다는 권위 있는 자료를 찾지는 못함