Java

Java / 메모리 가시성

Dear-J 2025. 5. 19. 16:41

메모리 가시성

멀티스레드 환경에서 한 스레드가 변경한 값이 다른 스레드에서 언제 보이는지에 대한 문제

 

실제 메모리의 접근 방식

메인 메모리는 가격ㄱ이 저렴해서 큰 용량을 쉽게 구성할 수 있지만 속도가 상대적으로 느림

>> 캐시 메모리는 비싸지만 매우 빠른 메모리

>> 현대 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