공부/Java

[공부/Java] Runtime Data Area

yulee_to 2022. 12. 28. 19:03

Java


Runtime Data Area는 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 나뉜다.

 

Method Area

JVM이 실행되면서 생기는 공간이다. 모든 쓰레드가 공유하는 메모리 영역으로 클래스, 인터페이스, 메소드, 필드, Static 변수 등의 바이트 코드가 저장되는 공간이다.

이 영역 안에는 Runtime Constant Pool이라는 공간도 있는데 '상수'정보가 저장된다. Class Area, Code Area, Static Area로 불려진다.

Heap Area

모든 쓰레드가 공유하며, new 키워드로 생성된 참조형의 데이터 타입을 갖는 객체와 배열이 저장되는 공간이다. 실제 데이터를 갖고 있는 Heap 영역의 참조 값을 Stack 영역의 객체가 가지고 있어 변수(객체, 객체변수, 참조변수)는 Stack 영역의 공간에서 실제 데이터가 저장된 Heap 영역의 참조값을 new 연산자를 통해 리턴 받는다.

메소드 영역에 로드된 클래스만 생성이 가능하고 GC가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.

Stack Area

메소드 호출시마다 각각의 스택 프레임(그 메소드 만의 공간)이 생성된다.

메소드 안에서 사용되는 값들을 저장하고, 호출된 메소드의 매개 변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장해주고 메소드 수행이 끝나면 프레임별로 삭제한다.

PC Register

쓰레드가 시작될 때 생성되며, 쓰레드가 생성될 때마다 생성되는 공간으로 쓰레드마다 하나씩 존재한다.

쓰레가 어떤 부분을 무슨 명령으로 실행해야할 지에 대한 기록을 하는 부분으로 현재 수행중인 JVM 명령의 주소를 가진다.

Native Method

자바 외 언어(C, C++)로 작성된 네이티브 코드를 위한 메모리 영역이다.

Java 변수에 따른 저장 공간

  • 클래스 변수 : Method Area
  • 인스턴스 변수 : Heap Area
  • 지역 변수 : Stack Area

참고 자료 :

https://velog.io/@shin_stealer/자바의-메모리-구조

https://m.blog.naver.com/heartflow89/220954420688

https://k9e4h.tistory.com/389

728x90