GW LABS

JVM 완벽 가이드: JVM 구조, JVM 역할, 동작 원리 총정리 본문

Programming/Java

JVM 완벽 가이드: JVM 구조, JVM 역할, 동작 원리 총정리

GeonWoo Kim 2025. 8. 9. 15:44

JVM 완벽 가이드: JVM 구조, JVM 역할, 동작 원리 총정리

서론

Java Virtual Machine(JVM)은 자바(Java)뿐 아니라 Kotlin, Scala 등 다양한 JVM 기반 언어의 실행을 책임지는 핵심 플랫폼입니다.
많은 개발자가 "JVM은 자바 코드를 실행하는 프로그램"이라고 알고 있지만, JVM의 역할은 그 이상입니다.
JVM 구조, JVM 역할, 그리고 C와 같은 언매니지드 언어와의 차이를 이해하면, 플랫폼 독립적인 애플리케이션 개발의 기반을 마련할 수 있습니다.

이번 글에서는 다음을 다룹니다:

  • JVM의 기본 개념과 역사
  • JVM과 C 같은 언매니지드 프로그래밍의 차이
  • JVM 기반 언어의 컴파일부터 런타임까지 동작 과정

1. JVM의 기본 개념과 역사

JVM(Java Virtual Machine)은 바이트코드(Bytecode)를 실행하기 위한 가상 머신입니다.
자바 소스 코드는 직접 OS에서 실행되지 않고, 먼저 바이트코드로 컴파일된 후 JVM 위에서 동작합니다.

JVM의 역사

  • 1995년 Sun Microsystems가 자바와 함께 JVM을 발표
  • 철학: "Write Once, Run Anywhere" (한 번 작성하면 어디서든 실행)
  • 현재는 OpenJDK, HotSpot, GraalVM 등 다양한 구현체 존재

핵심 요약: JVM은 하드웨어와 OS를 추상화하여, 플랫폼 독립적인 애플리케이션 실행 환경을 제공합니다.


2. JVM과 C 같은 언매니지드 언어의 차이

C, C++ 같은 언매니지드 언어는 메모리 관리와 하드웨어 접근을 개발자가 직접 제어합니다.
반면 JVM 기반 언어는 Garbage Collection(GC), 보안, 스레드 관리 등을 JVM이 담당합니다.

구분 JVM 기반 언어(Java, Kotlin 등) 언매니지드 언어(C, C++)
메모리 관리 GC 자동 관리 malloc, free 직접 호출
실행 방식 바이트코드 → JVM → OS 기계어 직접 실행
보안성 JVM Sandbox 보안 OS/하드웨어 직접 접근
이식성 높음(플랫폼 독립) 낮음(OS 종속)

C 예제 (메모리 직접 관리)

#include <stdio.h>
#include <stdlib.h>

int main() {
    int* arr = (int*)malloc(sizeof(int) * 5);
    if (arr == NULL) return 1;
    arr[0] = 10;
    printf("%d\n", arr[0]);
    free(arr);
    return 0;
}

JVM 기반 언어 예제 (자동 메모리 관리)

public class Main {
    public static void main(String[] args) {
        int[] arr = new int[5]; // JVM이 메모리 관리
        arr[0] = 10;
        System.out.println(arr[0]);
    }
}

3. JVM 구조와 동작 원리

JVM은 단순한 인터프리터가 아니라 클래스 로더, 실행 엔진, GC로 구성된 복합 시스템입니다.

JVM 동작 과정

  1. 컴파일 단계
    • .java → javac → .class(바이트코드)
  2. 클래스 로딩(Class Loader)
    • 바이트코드를 메모리에 로드
  3. 바이트코드 검증(Verifier)
    • 무결성, 보안성 검증
  4. 실행 엔진(Execution Engine)
    • 인터프리터: 바이트코드를 한 줄씩 실행
    • JIT(Just-In-Time): 자주 실행되는 코드(Hot Spot)를 기계어로 변환
  5. Garbage Collector
    • 사용되지 않는 객체 메모리 자동 회수

JVM 실행 흐름 예시

소스코드 (.java)
     ↓ javac
바이트코드 (.class)
     ↓ JVM Class Loader
메모리 로드
     ↓ Execution Engine (Interpreter / JIT)
실행 (OS 호출)

결론

JVM은 단순한 자바 실행기 이상으로, 다양한 언어의 실행 기반이자 플랫폼 독립성을 보장하는 핵심 기술입니다.
언매니지드 언어보다 안전성과 생산성이 높으며, GC, 보안, 스레드 관리까지 JVM이 제공하므로 개발자는 비즈니스 로직에 집중할 수 있습니다.

요약: JVM 구조와 역할을 깊이 이해하면, 더 안정적이고 이식성 높은 애플리케이션을 설계할 수 있습니다.
한 문장 가치: JVM은 모든 JVM 기반 언어 개발자의 필수 지식입니다.

Comments