자바 JVM 내부 구조
JVM이란?
JVM(Java Virtual Machine)은 자바 언어로 작성된 프로그램을 실행하는 가상 머신이다. 자바 프로그램은 컴파일 과정을 거치면서 자바 바이트 코드(.class 파일)로 변환되고, 이러한 바이트 코드는 JVM에서 실행된다.
JVM의 주요 구성 요소
Class Loader: JVM은 프로그램 실행 시 필요한 클래스를 동적으로 메모리에 로드한다. 이 역할은 Class Loader가 담당한다. Class Loader는 클래스 파일을 JVM으로 로드하고, 메모리에 적재한다.
Execution Engine: Execution Engine은 로드된 클래스 파일을 기계어로 변환하고 실행하는 역할을 한다. 주요 컴포넌트로는 Interpreter(인터프리터), JIT Compiler(Just-In-Time 컴파일러) 등이 있다.
Garbage Collector: 자바는 가비지 컬렉션을 사용하여 동적으로 할당된 메모리를 자동으로 관리한다. Garbage Collector는 더 이상 사용되지 않는 객체를 찾아 메모리를 정리하는 역할을 한다.
Runtime Data Area: JVM은 실행 중인 프로그램에 대한 데이터를 저장하기 위한 메모리 영역을 제공한다. 주요 구성 요소로는 Method Area, Heap, Stack 등이 있다.
JVM의 메모리 구조
Method Area
Method Area는 클래스와 인터페이스의 코드, 상수, static 변수 등을 저장하는 공간이다. 클래스 로더에 의해 로드된 클래스의 정보가 저장되며, JVM이 시작될 때 생성되고 프로그램이 종료될 때 소멸된다.
Heap
Heap은 객체와 배열 인스턴스를 저장하는 공간이다. 동적으로 할당된 메모리 영역으로, JVM이 자동으로 메모리를 할당하고 해제한다. Heap은 Young Generation과 Old Generation으로 나뉘어지며, Young Generation은 새로 생성된 객체가 위치하는 장소이고, Old Generation은 오랜 시간 동안 살아남은 객체가 위치하는 장소이다.
Stack
Stack은 스레드마다 별도로 존재하는 메모리 영역으로, 메소드 호출 시 생성되는 지역 변수, 매개변수, 리턴 값 등을 저장한다. Stack은 LIFO(후입선출) 구조로 동작하며, 메소드 호출이 끝나면 해당 메모리 영역이 해제된다.
PC Register
PC Register는 현재 수행 중인 JVM 명령어의 주소를 저장하는 공간이다. 모든 스레드마다 별도로 존재하며, 스레드가 다른 메소드로 진입하는 순간 해당 메소드의 주소가 PC Register에 저장된다.
Native Method Stack
Native Method Stack은 자바 외부에서 작성된 Native 코드를 위한 메모리 영역으로, Java가 아닌 다른 언어로 작성된 코드를 실행하는데 사용된다.
전체 내용 정리
JVM은 자바 언어로 작성된 프로그램을 실행하는 가상 머신이다. JVM은 Class Loader, Execution Engine, Garbage Collector, Runtime Data Area 등의 구성 요소로 구성되며, 실행 중인 프로그램의 데이터를 저장하기 위한 메모리 영역을 제공한다. 메모리 구조는 Method Area, Heap, Stack, PC Register, Native Method Stack 등으로 구성되어 있다.
댓글