본문 바로가기

자바

자바 JVM 내부 구조 및 메모리 구조

1. 자바 JVM 동작 방식

1) 클래스 로더(Class Loader)가 클래스 파일(.class)를 JVM Runtime Data Area로 로딩한다.

 

2) Runtime Data Area에 로딩 된 .class들은 Execution Engine을 통해 해석한다.


3) 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution Engine에 의해 GC의 작동과 스레드 동기화가 이루어진다.

 

 

2. JVM 구조

1) Class Loader (클래스 로더):
Class Loader는 자바 클래스들을 JVM의 메모리로 로드하는 역할을 한다.
프로그램 실행 시 필요한 클래스들을 동적으로 로드하여 JVM 메모리에 올리고, 중복 로딩을 방지한다.

 

2) Execution Engine (실행 엔진):
Execution Engine은 클래스 로더에 의해 메모리에 로드된 바이트 코드를 실행하는 역할을 한다.
바이트 코드를 해석하여 기계 코드로 변환하는 인터프리터와, 중복적으로 실행되는 코드를 JIT(Just-In-Time) 컴파일하여 최적화된 기계 코드로 변환하는 JIT 컴파일러가 포함된다.

 

3) Garbage Collector (가비지 컬렉터):
Garbage Collector는 더 이상 사용되지 않는 객체들을 찾아서 메모리를 회수하는 역할을 한다.
자바에서는 가비지 컬렉션을 통해 프로그래머가 직접 메모리를 관리할 필요가 없으며, 메모리 누수를 방지할 수 있다.

 

4) Runtime Data Areas (런타임 데이터 영역):
JVM은 프로그램 실행에 필요한 데이터를 런타임 데이터 영역에 저장하고 관리한다.

 

3. JVM 메모리 ( Runtime Data Area ) 구조
1) 메소드 영역(Method Area 또는 클래스 영역):
클래스 정보(메소드, 변수, 상수 등)를 저장한다. 모든 스레드에서 공유하는 메모리 영역이다.

 

2) 힙 영역(Heap):

동적으로 생성된 인스턴스 객체와 배열을 저장하는 영역이다.
JVM이 시작할 때 미리 정해진 크기의 힙 영역이 할당되며, 필요에 따라 자동으로 확장될 수 있다.

스레드 수에 관계없이 메모리 공유가 된다.
가비지 컬렉션(Garbage Collection)이 수행되어 더 이상 사용되지 않는 객체들을 자동으로 제거하여 메모리를 관리한다.

 

3) 스택 영역(Stack):

각 스레드마다 별도의 스택이 생성되는 영역이고, 스택 영역은 메소드 호출과 관련된 정보를 저장한다.
메소드가 호출될 때마다 스택 프레임(Stack Frame)이 생성되어 호출된 메소드의 지역 변수, 매개변수, 리턴 주소, 리턴 값 등을 저장한다.
메소드가 실행을 마치면 해당 스택 프레임은 제거된다.

* 스택 프레임 : 메서드가 호출되기 이전의 상태를 기록하는 역할을 수행한다.

 

4) PC 레지스터 영역(Program Counter Register):
각 스레드마다 별도의 PC 레지스터를 가진다.
현재 실행 중인 스레드가 다음에 실행할 명령어의 주소를 갖는다.

 

5) 네이티브 메소드 스택 영역(Native Method Stack):
자바 코드가 아닌 다른 언어로 작성된 네이티브 메소드의 호출과 관련된 정보를 저장한다.

 

참고

https://coding-factory.tistory.com/828
 

 

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

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

coding-factory.tistory.com

 

'자바' 카테고리의 다른 글

자바 Stack  (0) 2023.07.24
자바 List  (0) 2023.07.23
자바 String builder, String buffer 차이  (0) 2023.07.18
자바 JVM 이란  (0) 2023.07.18
자바 Call by value, Call by reference, 기본 자료형, 참조 자료형  (0) 2023.07.18