자바

[Java] JVM 메모리 사용 영역

책 읽는 개발자_테드 2021. 8. 20. 20:45
반응형

JVM 메모리 사용 영역

 JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)를 크게 다섯 가지 PC Register, Native Method Stack, Method Area, JVM Stack,  Heap로 구분해서 사용한다.

https://www.kdata.or.kr/info/info_04_view.html?field=&keyword=&type=techreport&page=19&dbnum=183668&mode=detail&type=techreport

 

PC(Program Counter) Register 

스레드가 생성될 때마다 만들어지는 영역으로 현재 쓰레드가 실행되는 부분의 주소와 명령을 저장한다. 이를 통해 JVM은 여러 스레드가 동시에 실행되는 것을 지원한다.

 

https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-2.html

https://jeong-pro.tistory.com/148

 

Native. Method Stack

JVM에서 C와 같은 Java 언어 이외의 네이티브 메서드를 지원하기 위해 사용하는 스택 구조의 메모리 영역이다.

 

 메소드 영역 (= 클래스 영역)

 

- 클래스파일을 클래스 로더로 읽어 클래스별로 런타임 상수풀(runtime constant pooll), 필드 데이터, 메소드 데이터, 메소드 코드, 생성자 코드, 변수 정보, static 변수 등으로 분류해서 저장

- JVM이 시작할 때 생성

- 모든 스레드가 공유하는 영역

 

힙 영역

- 객체가(배열포함) 생성되는 영역

- JVM 스택 영역의 변수나 다른 객체의 필드에서 참조

- 참조하는 변수나 필드가 없다면 쓰레기로 취급하고, JVM이 GC를 실행하여 쓰레기 객체를 힙 영역에서 자동으로 제거

 

JVM 스택 영역

- 각 스레드 마다 하나씩 존재, 스레드가 시작될 때 할당

- 메소드를 호출할 때마다 프레임(Frame)을 추가하고, 메소드가 종료되면 해당 프레임을 제거

    ▷ 예외 발생 시 printStackTrace() 메소드로 보여주는 Stack Trace 각 라인은 하나의 프레임을 표현한 것

- 프레임은 함수 실행 시 생성되는 변수, 연산 스택, 상수 풀 참조들을 담는다.

     프레임 내부 로컬 변수 스택에서 기본 타입 변수 또는 참조 타입 변수가 추가, 제거된다.

- 변수는 초기화(최초로 변수에 값이 저장될 때)시 로컬 변수 스택에 생성되며, 선언된 블록을 벗어나면 제거됨 

- 자바 프로그램에서 추가적으로 스레드를 생성하지 않았다면 main 스레드만 존재하므로 JVM 스택도 1개

 

 

 

 

출처

이것이 자바다

반응형