메모리 가시성
멀티스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지에 대한 문제
실제 메모리의 접근 방식
메인 메모리는 가격ㄱ이 저렴해서 큰 용량을 쉽게 구성할 수 있지만 속도가 상대적으로 느림
>> 캐시 메모리는 비싸지만 매우 빠른 메모리
>> 현대 CPU 대부분은 코어 단위로 캐시 메모리를 각각 보유
Volatile
캐시메모리를 사용하지 않고 값을 읽거나 쓸 때 항상 메인 메모리에 직접 접근
캐시 메모리를 사용할 떄보다 성능이 느려지는 단점
Java Memory Model
자바 프로그램이 어떻게 메모리에 접근하고 수정할 수 있는지를 규정
>> 특히 멀티 스레드 프로그래밍에서 스레드 간의 상호작용을 정의
>> happens-before 관계 정의
happens-before
자바 메모리 모델에서 그레드 간의 작업 순서를 정의하는 개념
>> A 작업이 B 작업보다 happens-before 관계에 있음
>> A 작업에서의 모든 메모리 변경 사항은 B 작업에서 볼 수 있음
>> 즉 A 작업에서 변경된 내용은 B 작업이 시작되기 전에 모두 메모리에 반영됨
출처 : 김영한, 김영한의 실전 자바 - 고급 1편
'Java' 카테고리의 다른 글
Java / 동기화 Synchronized (0) | 2025.05.22 |
---|---|
Java / 인터럽트 (0) | 2025.05.16 |
Java / 스레드 제어와 생명 주기 (0) | 2025.05.15 |
Java / 스레드 생성과 실행 (0) | 2025.05.12 |
Java / 프로세스와 스레드 (0) | 2025.05.11 |