자바 메모리 모델 JMM은 자바 프로그램의 동작을 이해하고 멀티스레드 환경에서 동기화 이슈를 다루기 위한 핵심 개념입니다.
이 모델은 필드, 메서드, 객체 등 메모리에서 어떻게 표현되는지, 그리고 이들이 어떻게 스레드에 의해 접근되는지 정의합니다.
JMM은 기본적으로 두 가지 메모리 영역, 즉 Heap
, Stack
을 관리합니다.
힙은 모든 스레드가 공유하는 메모리 영역입니다. 객체의 실제 데이터와 그런 객체들의 인스턴스 변수들을 이 곳에 할당됩니다. 가비지 컬렉션이 이 영역의 불필요한 객체를 제거하는 작업을 수행합니다.
스택은 각 스레드가 개별적으로 가지는 메모리 영역입니다. 메서드 호출과 지역 변수에 대한 정보가 이 곳에 저장됩니다. 메서드 호출이 발생할 때마다 메서드 호출에 대한 스택 프레임이 생성되고, 메서드가 종료되면 해당 스택 프레임이 제거됩니다.
또한 JMM은 휘발성, 동기화, 원자적과 같은 개념을 제공하여 멀티스레드 환경에서 동시성 문제를 처리하는 데 도움을 줍니다. 휘발성은 변수의 값을 스레드 간에 공유하도록 하고 동기화는 임계 영역의 동시 접근을 제어하며 원자적은 동시성 문제 없이 단일 연산을 수행할 수 있도록 합니다.
JMM은 이러한 개념들을 통해서 자바 프로그램의 안정성과 성능을 보장합니다.