volatile 키워드 하나를 제대로 이해하려면 CPU가 메모리를 어떻게 다루는지부터 알아야 한다. 그래서 시작점은 캐시다.volatile을 공부하다 보면 "가시성을 보장한다"는 설명을 만난다. 가시성이 뭔지, 왜 보장이 안 될 수 있는지를 이해해보자
1편에서 캐시 일관성과 MESI 프로토콜을 다뤘다. 이번엔 한 단계 더 들어간다. 캐시 일관성이 보장된다고 해도 실행 순서 자체가 바뀌면 여전히 문제가 생긴다.1편에서 멀티코어 환경에서 캐시 복사본 간 일관성 문제를 봤다. 그런데 사실 그것보다 더 근본적인 문제가 있다
1편에서 캐시 일관성, 2편에서 명령어 재정렬을 다뤘다. 이제 Java가 이 문제들을 어떻게 해결하는지 볼 차례다.2편에서 컴파일러, CPU, 메모리 시스템이 각자의 이유로 명령어 순서를 바꾼다는 걸 봤다.