본문 바로가기
자바

[Java] JVM 메모리 사용 영역

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

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개

 

 

 

 

출처

이것이 자바다

반응형

댓글