Juuunew 살아남기

[JAVA] JVM 04 - 메모리 영역 (Runtime Data Area) 본문

Language/JAVA

[JAVA] JVM 04 - 메모리 영역 (Runtime Data Area)

Juuunew 2023. 1. 28. 08:03

런타임 데이터 영역 (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가지 부분으로 나눌 수 있는데 이 부분은 추후 따로 포스팅하도록 하겠다.

 

👉 Heap 메모리 포스팅 보러 가기

 

Stack Area

 

int, long, boolean 등 원시타입의 데이터가 값과 함께 할당되는 영역이며, 함수나 메서드의 지역 변수, 매개 변수가 저장된다. 함수나 메서드가 호출될 때마다 스택 프레임이 스택 메모리 안에 쌓인다. 스택 영역은 각 스레드마다 하나씩 존재하며, 스레드가 시작될 때 할당된다. 어플리케이션 실행 중 지정된 메모리 크기를 넘어서게 되면 StackOverFlow가 발생하게 된다.

 

👉 Stack 메모리 포스팅 보러 가기

 

PC Register

 

스레드가 어떤 부분을 어떤 명령으로 실행해야 할 지에 대한 기록을 하는 부분으로 현재 수행 중인 JVM 명령의 주소를 저장하는 공간이다.

자바에서 스레드는 각자의 메소드를 각자 실행하게 되는데 쓰레드 별로 동시에 실행하는 환경이 보장되어야 하므로 실행 중인 JVM에서는 명령어 주소값을 저장할 공간이 필요하다. 이러한 부분을 PC Register 영역이 관리해 준다.

 

Native Method Stack

 

자바 코드가 컴파일되어 생성되는 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행하는 영역이다.

 

💡 공부 중 정리하는 내용이므로 부족한 부분이 있을 수 있습니다.

 

💡 참고자료

 

블로그 1

 

JVM에 관하여 - Part 3, Run-Time Data Area

Java 로 작성된 코드는 어떻게 돌아가는 걸까? 해당 물음에 답을 찾기 위한 JVM 시리즈 3편, JVM 의 구성요소 중 Run-Time Data Area 에 관한 글입니다. 이번 글에서는 JVM…

tecoble.techcourse.co.kr

블로그 2

 

[Java] 자바 JVM 내부 구조와 메모리 구조에 대하여

저번 포스팅에서는 JVM에 대해서 간략하게 알아보는 시간을 가졌다면 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 하겠습니다. 혹시 JVM의 정의와 왜 필요한지 궁금하시

coding-factory.tistory.com

블로그 3

 

[JAVA] ☕ JVM 내부 구조 & 메모리 영역 자세히 정리

저번 포스팅에서는 JRE / JDK / JVM에 대해서 간략하게 알아보는 시간을 가졌다면, 이번 포스팅에서는 JVM의 내부 구조에 대해 좀 더 자세하게 알아보도록 할 예정이다. JVM(자바 가상 머신)은 자바 언

inpa.tistory.com