JAVA JVM 메모리 사용방식
메모리는 크게 코드 실행 영역, static 영역, stack 영역, Heap 영역 4자지로 구성
코드 실행 영역 | 스태틱(Static) 영역 | |
스택(Stack) 영역 | 힙(Heap) 영역 |
스태틱(Static) 영역
- static영역은 클래스들의 놀이터
- JVM은 가장 먼저 java.lang 패키지를 static영역에 배치된다.
- 프로그램 상의 모든 클래스와 import패키지는 static영역에 배치 된다.
- 클래스 멤버 변수는 static 영역에 생성되며, JVM이 종료될 때까지 고정된(static) 상태로 자리를 지킨다.
스택(Stack) 영역
- stack 영역은 메서드들의 놀이터
- 여는 중괄호 "{" 를 만날 때마다 스택 프레임(stack frame)이 생긴다.
- 닫는 중괄호 "}" 를 만나면 스택 프레임(stack frame)이 소멸된다.
- 지역 변수는 스택 프레임 안에 생성되며, 스택 프레임이 소멸되면 같이 소멸된다.
- 외부 스택 프레임에서 내부 스택 프레임의 변수 접근은 불가능, 내부에서 외부는 가능하다. 예를 들어 main() 스택 프레임에서 if() 스택 프레임은 접근 불가능, if() 스택 프레임에서 main() 스택 프레임 접근 가능하다.
- 서로 다른 스택 프레임들은 서로 지역 변수들의 접근이 불가능하다.
- 멀티 스레드는 스택 영역을 스레드 개수만큼 분할하여 사용하게 되고, 하나의 스레드는 다른 스레드의 스택 영역에 접근할 수 없지만 스태틱 영역과 힙 영역은 공유해서 사용한는 구조다.
힙(Heap) 영역
- 객체들의 놀이터
- 객체 멤버 변수는 heap 영역에 배치
- 참조되지 않는 객체는 가비지 컬렉터(GC)에 의해 소멸된다.
- 상속의 경우 하위 클래스와 함께 상위 클래스도 힙 영역에 생성된다.
- JDK : 자바 개발 도구
- JRE : 자바 실행 환경
- JVM : 자바 가상 기계
JRE는 눈에 보이지 않게 뒤에서 JVM을 부팅하고 JVM은 메모리 구조를 만들어 java.lang 패키지 로딩, 각종 클래스 로딩, main() 메서드 스택 프레임 배치, 변수 공간 배치 등 여러 가지 일을 처리한다.
main() 메서드가 끝나면 JRE는 JVM을 종료하고 JRE 자체도 운영체제 상의 메모리에서 사라진다. 따라서 메모리도 사라지게 된다.
참고 자료
- 스프링 입문을 위한 자바 객체 지향의 원리와 이해, 위키북스, 김종민(지은이)
'Java' 카테고리의 다른 글
[Java] GUI 계산기 만들기(2) 키보드 (0) | 2020.05.27 |
---|---|
[Java] GUI 계산기 만들기(1) (1) | 2020.05.21 |
[Java] 템플릿 메서드 , 팩터리 메서드 , 전략 , 템플릿 콜백 패턴 (0) | 2020.05.14 |
[Java] 어댑터 패턴, 프록시 패턴, 데코레이터 패턴, 싱글턴 패턴 (0) | 2020.05.14 |
[Java] 객체지향 5원칙 SOILD (0) | 2020.05.14 |