자바 가상 머신(Java Virtual Machine)

기술노트

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

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

Jvm.jpeg

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

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

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


🧠 JVM에서의 메모리 관리

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

🔁 실행 과정

🔁 JVM 실행 과정 요약

  1. JVM이 실행되면, 운영체제에서 필요한 메모리를 받습니다.
  2. javac.java 파일을 .class 바이트코드로 변환합니다.
  3. 클래스 로더가 .class 파일을 메모리로 불러옵니다.
  4. 실행 엔진이 바이트코드를 해석하여 실행합니다.
  5. 실행 중에 스레드 동기화와 가비지 컬렉션이 자동으로 처리됩니다.
Java exe.jpg

🛠 주요 구성 요소

📘 자바 컴파일러

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

📦 클래스 로더

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

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

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

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

🧹 가비지 컬렉션(Garbage Collection)

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

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

가비지 컬렉션 절차:

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