본문 바로가기
Java/JVM

메모리 가시성

by 정재익 2026. 2. 2.

멀티스레드에서 어떤 스레드에서 힙 메모리에 있는 값을 변경했다고 다른 스레드에서 바로 그 값이 보이는 것이 아니다.

여러 코어가 있는 CPU의 경우 각 스레드가 캐시 메모리를 가지고 있다면 메인 스레드 변경이전에 캐시메모리에 변경한다.

만약 다른 스레드에서 힙 메모리의 값에 대해 while문을 돌고 있었다면 그 스레드는 자신의 캐시 메모리를 확인하기 때문에 영원히 while문이 끝나지 않을 수 있다.

 

보통 컨텍스트 스위칭 할 때 캐시 메모리를 비우기 때문에 메인메모리에 쓰고 캐시메모리에 옮겨쓰는게 일어나지만 컨텍스트 스위칭에서 무조건 반영된다고 확신할 수 없다.

 

자바의 volatile는 캐시 메모리가 아닌 메인 메모리에 직접 쓰고 조회하라는 명령어이다.

캐시 메모리를 사용하는 것보다 성능이 느려진다. 대략 5배정도 느려지고 얼마나 느려지는거는 캐시메모리 사양에 따라다르지만 대부분 2배이상은 느려짐

'Java > JVM' 카테고리의 다른 글

JVM  (0) 2026.02.08
자바 메모리 모델 (JMM)  (0) 2026.02.02
스레드 로컬  (0) 2026.01.23
리플렉션  (0) 2026.01.22
자바의 컴파일, 클래스 로딩, 실행 구조 정리  (0) 2026.01.03