상세 컨텐츠

본문 제목

JVM 메모리 구조

안드로이드/basic

by 개발혱 2022. 6. 15. 21:28

본문

JVM(Java Virtual Manchine)

- 자바 가상 머신

- 자바와 운영체제 사이에서 중개자 역할을 수행

- 운영체제에 구애받지 않고 프로그램 실행할 수 있게 도와줌

- 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행

- 스택 기반으로 동작

 

Java Code(.java)

JAVAC compiler

Byte Code(.class)

JVM(Windows / Linux / Mac)

 

 

(1) Class Loader

JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈

런타임 시에 동적으로 클래스 로드

 바이트코드를 읽고, 클래스 정보 메모리 Heap/Method Area  저장

 

(2) Execution Engine

클래스 로드를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명령어 단위로 읽어서 실행

JIT 컴파일러 방식을 통해 이점을 보완

 

(3) Garbage Collector

Garbase Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할

 

(4) Runtime Data Area

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

Method Area(Runtime Constant Pool), Heap | JVM Language Stacks, PC Registers, Native Method Stacks

JVM은 OS로부터 메모리를 할당받은 후 해당 메모리를 용도에 따라 여러 영역으로 나누어서 관리

Method Area, Heap : 모든 스레드가 공유하는 영역

Stacks, PC Registers, Native Method Stack : 각 스레드마다 고유하게 생성하며 스레드 종료 시 소멸되는  영역

 

 

(4-1) Method Area

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

클래스, 인터페이스, 메서드, 필드, Static 변수 등의 바이트 코드 보관

 

(4-2) Heap Area

모든 스레드가 공유하며, new 키워드로 생성된 객체와 배열이 생성되는 영역

메서드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리 확인하고 제거하는 영역

 

(4-3) Stack Area

지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값 등이 생성되는 영역(로컬 변수)

int a = 10; // 스택에 메모리 이름이 a라고 붙여주고 10인 메모리 공간

Person p = new Person(); // Person p는 스택 영역(주소 값)에 생성되고 new로 생성된 Person은 힙 영역

메서드 호출할 때마다 개별적으로 스택 생성

 

(4-4) PC Register (PC 레지스터)

Thread가 생성될 때마다 생성되는 영역으로 Program Counter

즉, 현재 스레드가 실행되는 부분의 주소와 명령을 저장하는 영역

 

(4-5) Native Method Stack

C/C++ Low level 코드를 실행하는 스택, JNI 참조 영역

 

참고 자료

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

 

JVM 구조와 자바 런타임 메모리 구조 (자바 애플리케이션이 실행될 때 JVM에서 일어나는 일, 과정

JVM(Java Virtual Machine) : 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다. CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능하다. 즉, 운영체제 위에서 동작하는 프로세스로 자

jeong-pro.tistory.com

 

 

관련글 더보기