일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- stack메모리
- 실행 엔진
- 개방-폐쇄 원칙
- Heap
- pc register
- Data Structure
- Open Closed Principle
- 자료구조
- Class Loader
- 자바
- Native Method Stack
- 객체지향 설계 5원칙
- 단일책임원칙
- 개방폐쇄원칙
- Spring SOLID
- Spring
- Execution Engine
- Stack
- 객체지향
- Single Responsibillity Principle
- CS
- JVM
- 자바 heap
- 스택메모리
- 단일 책임 원칙
- Java
- Runtime data Area
- 스택
- solid
- 의존성 역전 원칙
- Today
- Total
Juuunew 살아남기
[JAVA] JVM 04 - 메모리 영역 (Runtime Data Area) 본문
런타임 데이터 영역 (Runtime Data Area - 메모리)
런타임 데이터 영역은 자바 어플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다. 즉, 프로그램을 수행하기 위해 OS에서 할당받은 메모리 공간이다.
런타임 데이터 영역은 다섯가지의 영역으로 나눌 수 있다.
- Method Area
- Heap Area
- Stack Area
- PC Register
- Native Method Stack
이 중 Method Area, Heap Area는 모든 쓰레드가 공유하고, 나머지는 각 쓰레드마다 생성되는 영역이다.
Method Area
클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보와 같은 각종 필드 정보들과 메서드 정보, 데이터 타입 정보, static 변수, final class 등이 생성되는 영역이다.이다. 이 영역은 JVM 당 하나만 생성이 되며, 인스턴스 생성에 필요한 정보도 존재하기 때문에 JVM에 생성된 모든 스레드들이 공유하게 된다.
JVM의 다른 메모리 영역에서 해당 정보에 대한 요청이 오면, 실제 물리 메모리 주소로 변환해서 전달해 준다. 기초 역할을 하므로 JVM 구동 시작 시에 생성이 되며, 종료 시까지 유지되는 영역이다.
Rumtime Constant Pool 상수 자료형을 저장하여 참조하고 중복을 막는 역할을 수행하며 Method Area 영역에 포함되지만 별도의 관리영역이다.
Heap Area
Method Area와 같이 모든 스레드에서 공유가 되고, 코드 실행을 위한 객체 및 JRE 클래스들이 탑재된다. 문자열에 대한 정보를 가진 String Pool과 실제 데이터를 가진 인스턴스, 배열 등이 저장된다.
쉽게 말해 new 키워드로 생성된 객체와 배열이 저장되는 영역이다. 또한 참조되지 않는 인스턴스와 배열에 대한 정보를 얻을 수 있기 때문에 GC의 주 대상이 된다.
Heap 메모리는 인스턴스가 생성된 후 시간에 따라 5가지 부분으로 나눌 수 있는데 이 부분은 추후 따로 포스팅하도록 하겠다.
Stack Area
int, long, boolean 등 원시타입의 데이터가 값과 함께 할당되는 영역이며, 함수나 메서드의 지역 변수, 매개 변수가 저장된다. 함수나 메서드가 호출될 때마다 스택 프레임이 스택 메모리 안에 쌓인다. 스택 영역은 각 스레드마다 하나씩 존재하며, 스레드가 시작될 때 할당된다. 어플리케이션 실행 중 지정된 메모리 크기를 넘어서게 되면 StackOverFlow가 발생하게 된다.
PC Register
스레드가 어떤 부분을 어떤 명령으로 실행해야 할 지에 대한 기록을 하는 부분으로 현재 수행 중인 JVM 명령의 주소를 저장하는 공간이다.
자바에서 스레드는 각자의 메소드를 각자 실행하게 되는데 쓰레드 별로 동시에 실행하는 환경이 보장되어야 하므로 실행 중인 JVM에서는 명령어 주소값을 저장할 공간이 필요하다. 이러한 부분을 PC Register 영역이 관리해 준다.
Native Method Stack
자바 코드가 컴파일되어 생성되는 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행하는 영역이다.
💡 공부 중 정리하는 내용이므로 부족한 부분이 있을 수 있습니다.
💡 참고자료
'Language > JAVA' 카테고리의 다른 글
[JAVA] JVM 03 - 실행 엔진 (Execution Engine) (0) | 2023.01.12 |
---|---|
[JAVA] JVM 02 - 클래스 로더 (Class Loader) (0) | 2023.01.11 |
[JAVA] JVM 01 - JVM이란? / JVM의 구조 (0) | 2023.01.10 |
[JAVA] 메모리 - Heap (0) | 2023.01.02 |
[JAVA] 메모리 - Stack (2) | 2022.12.27 |