JAVA/포스팅

자바 JVM의 메모리구조

짜집퍼박사(짜박) 2023. 11. 7. 03:47

자바 가상 머신 (JVM, Java Virtual Machine)은 자바 프로그램이 실행될 때 메모리를 관리하는 핵심 역할을 하는 컴퓨터 프로그램입니다. JVM의 메모리 구조는 크게 다음과 같은 영역으로 나눌 수 있습니다.

 

1. 메서드 영역 (Method Area)

메서드 영역은 JVM이 클래스 파일을 읽고 클래스와 인터페이스의 코드, 메서드, 필드, 상수 및 클래스 로더에 의해 로드된 정보를 저장하는 영역입니다. 클래스 로더는 클래스 파일을 읽고 클래스 정보를 메서드 영역에 로드하며, 하나의 클래스에 대한 정보는 하나의 메서드 영역에만 존재합니다. 또한, 메서드 영역은 JVM 내에서 공유됩니다.

 

2. 힙 영역 (Heap Area)

힙 영역은 객체 인스턴스와 배열을 저장하는 메모리 영역입니다. 자바 프로그램에서 동적으로 생성된 모든 객체와 배열은 힙 영역에 할당됩니다. 힙 영역은 가비지 컬렉션(Garbage Collection)의 대상이 되며, 더 이상 참조되지 않는 객체들을 정리합니다.

 

3. 스택 영역 (Stack Area)

스택 영역은 메서드 호출과 관련된 데이터를 저장하는 메모리 영역입니다. 각 메서드 호출 시에 해당 메서드의 지역 변수, 매개변수, 복귀 주소 및 실행 컨텍스트 정보가 스택 프레임(Stack Frame)에 저장됩니다. 스택은 후입선출(Last-In-First-Out, LIFO) 구조를 따르며, 메서드 호출이 완료되면 해당 메서드의 스택 프레임이 제거됩니다.

 

4. PC 레지스터 (Program Counter Register)

PC 레지스터는 현재 실행 중인 스레드의 명령어 주소를 가리키는 역할을 합니다. 스레드는 CPU에서 실행되며, PC 레지스터는 현재 스레드가 어떤 명령어를 실행해야 하는지 추적합니다.

 

5. 네이티브 메서드 스택 (Native Method Stack)

네이티브 메서드 스택은 네이티브 코드(주로 C 또는 C++로 작성된 코드)를 실행하는데 사용됩니다. 자바 프로그램에서 네이티브 메서드를 호출할 때, 해당 메서드의 호출 정보는 네이티브 메서드 스택에 저장됩니다.

 

6. 레지스터 (Registers)

레지스터는 CPU 내부에 존재하는 고속 메모리 영역으로, 데이터 및 연산에 대한 임시 저장소로 사용됩니다. JVM은 레지스터를 사용하여 명령어 실행과 데이터 처리를 최적화합니다.
메모리 구조는 JVM의 관리 및 최적화를 위해 중요한 역할을 합니다. 힙과 스택은 프로그램 실행 중에 동적으로 할당 및 해제되며, 가비지 컬렉션은 힙에서 더 이상 참조되지 않는 객체를 정리합니다. 스택은 메서드 호출 및 반환에 사용되어 메서드 호출 스택 트레이스를 추적합니다. 메서드 영역은 클래스 정보 및 클래스 변수(static 변수)를 저장하며, 네이티브 메서드 스택은 네이티브 코드 실행에 필요한 정보를 유지합니다.

JVM의 메모리 구조를 이해하고 관리하는 것은 자바 애플리케이션의 성능 및 안정성을 보장하기 위한 중요한 부분입니다.

 

With ChatGPT