Runtime Data Areas는 JVM이 OS로부터 받아온 메모리 영역을 의미한다. Runtime Data Areas는 크게 3가지의 영역으로 나누어지게 된다.
1. Method Area
2. Stack
3. Heap
method Area
method Area는 클래스에 대한 정보(필드, 메서드정보, 타입에 대한 정보)가 저장되며 static변수, 메서드의 바이트 코드 등을 저장한다. method Area안에 있는 RunTime Constant Pool에는 클래스와 인터페이스에 대한 모든 constant 정보가 들어있으며 type, file, method에 대한 Symbolic reference정보가 있다.
stack
스택에는 메서드가 실행될 때마다 stack frame이 생성된다. stack frame에는 메서드실행에 필요한 지역변수, 파라미터, 연산에 필요한 임사값등이 저장된다. stack frame안에는 3가지 영역으로 구분되는데 Local Variables Array, Operand Stack, Frame data로 나누어진다. 각가 살펴보면 Local Variable Array에는 지역변수, 파라미터가 담기며 길이는 컴파일 시에 정해진다. rumtime도중 발생하는 임시값들은 Operand Stack에 push 되며 해당 값이 저장되면 pop 한다. 마지막으로 Frame data에는 메서드의 반환값과 리턴위치가 저장된다. stack frame은 stack구조로 이루어져 있어 메서드 안에서 다른 메서드를 호출하면 호출한 메서드는 대기상태가 되고 호출된 메서드는 call stack에 stack frame이 push 된다.
heap
heap은 JVM과 같은 생성 및 소멸시기를 공유한다. heap에는 인스턴스와 배열이 할당되는 영역으로 GC에 의해 관리된다.
heap안에는 String constant pool이 있는데 String타입의 문자열 상수를 생성하면 저장되는 영역이다. heap영역이 모두 차게 되면 OutOfMemoryError가 발생한다.
Reference
- [Java] 자바 JVM 내부 구조와 메모리 구조에 대하여 (tistory.com)
- 자바가상머신(JVM) 이란 — wellbell의 개발일기 (tistory.com)
- #자바가상머신, JVM(Java Virtual Machine)이란 무엇인가? (tistory.com)
- [실무 면접 준비 - 4] 객체지향 & JVM (OOP & JVM) (imbf.github.io)
- 자바(Java) 메모리 구조 / Runtime Data Area :: 컴퓨터 공부하는 블로그 (tistory.com)
- 차근차근 알아보는 Java 프로그램 실행 과정 (velog.io)
'Java' 카테고리의 다른 글
인터페이스(interface) (0) | 2023.05.12 |
---|---|
추상클래스 (0) | 2023.05.11 |
가변배열, 가변인자 (0) | 2023.05.02 |
arraycopy 메서드를 이용한 배열의 복사 (0) | 2023.04.26 |
for each (0) | 2023.04.25 |