Java memory model 정리
05 Jul 2020Java Memory Model
JVM
- 운영체제로부터 할당받은 메모리 공간을 기반으로 자바 프로그램 실행
- 운영체제로부터 할당받은 메모리 공간을 이용해서 자기 자신과 자바 프로그램 실행
JVM의 메모리 모델
메모리 공간 활용의 효율성을 높이기 위해 메모리 공간을 세 개의 영역으로 구분
- 메서드 영역: 메서드의 바이트 코드, static 변수
- 스택 영역: 지역 변수, 매개 변수
- 힙 영역: 인스턴스 (객체)
바이트코드(Bytecode) 고급 언어로 작성된 소스 코드를 가상 머신이 이해할 수 있는 중간 코드로 컴파일 한 것을 말한다. 가상머신은 이 바이트 코드를 각각의 하드웨어 아키텍처에 맞는 기계어로 다시 컴파일하며 어셈블리어에 가까운 형태이다.
메서드 영역
- 메서드의
자바 바이트 코드
는 JVM이 구분하는 메모리 공간 중에서 메서드 영역에 저장 static
으로 선언된 클래스 변수도 메서드 영역에 저장- 이 영역에 저장된 내용은 프로그램 시작 전에 로드되고, 프로그램 종료 시 소멸
스택 영역
매개변수
,지역변수
가 할당되는 메모리 공간- 프로그램이 실행되는 도중에 임시로 할당되었다가 바로 소멸되는 특징이 있는 변수가 할당
- 이 영역에 저장된 변수는 해당 변수가 선언된 메서드 종료 시 소멸
스택의 흐름
- 지역 변수는 스택에 할당
- 스택에 할당된 지역변수는 해당 메서드를 빠져나가면 소멸
- 할당 및 소멸의 특성상 그 형태가 장작을 쌓는 것과 유사해서 스택이라 이름 지어짐
- 할당 및 소멸의 특성상 메서드 별 스택 구분
힙 영역
인스턴스(객체)
가 생성되는 메모리 공간- JVM에 의한 메모리 공간의 정리(Garbage Collection)가 이뤄지는 공간
- 할당은 프로그래머가, 소멸은 JVM이 처리
- 참조변수에 의한 참조가 전혀 이뤄지지 않는 인스턴스가 소멸의 대상이 되며 JVM은 인스턴스의 참조관계를 확인하고 소멸 대상선정
Garbage Collection
- GC는 한 번도 발생하지 않을 수 있음
- GC가 발생하면, 소멸의 대상이 되는 인스턴스는 결정되지만 이것이 실제 소멸로 바로 이어지지 않음
- 인스턴스의 실제 소멸로 이어지지 않은 상태에서 프로그램이 종료될 수 있으며, 종료가 되면 인스턴스는 소멸됨