자바 가상 머신(Java Virtual Machine)

기술노트

☕ 자바 가상 머신(Java Virtual Machine)

시스템 메모리를 관리하면서, 자바 기반 애플리케이션을 위해 **이식 가능한 실행 환경**을 제공함.

Jvm.jpeg

JVM은 다른 프로그램을 실행시키는 것이 목적이며, 아래와 같은 기능을 갖추고 있음:

  • 자바 프로그램이 어느 기기나 운영체제 상에서도 실행될 수 있도록 함
  • 프로그램 메모리를 관리하고 최적화함
JVM은 코드를 실행하고, 해당 코드에 대해 런타임 환경을 제공하는 프로그램에 대한 사양임

개발자들이 말하는 JVM은 일반적으로 *자바 애플리케이션을 실행하고 관리하는 프로세스*를 의미함. 클래스 로더를 통해 자바 애플리케이션을 읽고, 자바 API와 함께 실행하며, 운영체제와 자바 애플리케이션 사이의 **중개자 역할**을 수행함.


🧠 JVM에서의 메모리 관리

JVM 실행에 있어서 가장 일반적인 상호작용은 힙과 스택의 메모리 사용을 확인하는 것임.

🔁 실행 과정

1. 프로그램 실행 시, JVM은 OS로부터 메모리를 할당받음 2. 자바 컴파일러(JAVAC)가 `.java` 소스를 `.class` 바이트코드로 변환 3. 클래스 로더가 class 파일들을 JVM 메모리 영역으로 로딩 4. Execution Engine이 바이트코드를 해석 5. 실행 중 스레드 동기화, 가비지 컬렉션 등을 수행하며 프로그램이 동작


🛠 주요 구성 요소

📘 자바 컴파일러

  • 자바 소스코드(`.java`)를 바이트코드(`.class`)로 변환함

📦 클래스 로더

  • JVM은 런타임에 클래스를 처음 참조할 때 동적으로 로드함
  • 이 작업을 담당하는 것이 클래스 로더

🧱 JVM 메모리 영역 구조 (Runtime Data Areas)

JVM이 운영체제에서 실행되면서 할당받는 메모리 영역

JVM 메모리 영역 설명
영역 설명
PC 레지스터 각 스레드가 현재 실행 중인 명령어의 주소를 저장
JVM 스택 지역 변수, 매개변수, 메서드 호출 정보를 저장
네이티브 메서드 스택 네이티브(기계어) 메서드를 위한 공간
힙(Heap) 객체, 배열 등 런타임에 생성된 데이터 저장. 가비지 컬렉션 대상
메서드 영역 클래스 정보, 상수, 정적 변수, 메서드 바이트코드 저장
  • 힙과 메서드 영역은 모든 스레드가 **공유**
  • PC 레지스터, JVM 스택 등은 **스레드마다 개별**

🧹 가비지 컬렉션(Garbage Collection)

자바는 JVM이 메모리를 자동으로 관리함

  • 불필요해진 객체를 탐색해 제거하고, 그 메모리를 재사용
  • 힙 영역에서 동작하며, 주기적으로 작동

가비지 컬렉션 절차:

  1. 참조되지 않은 객체 탐색
  2. 해당 객체 메모리 회수
  3. 힙 공간 정리 및 재사용