JVM..?

Jihye Gim·2026년 2월 19일

Codeit SB11

목록 보기
2/22
  1. JVM 개요

JVM은 Java를 플랫폼 독립적으로 실행시키는 추상 실행 환경이다.

구조적으로 보면, Java는 Write Once, Run Anywhere 지향한다.
이를 가능하게 하는 계층으로 구조는 다음과 같다.

Java source (.java)
↓ Javac Compiler
Bytecode (.class)
↓ JVM
OS(Operationg System)/ Hardware

JVM 주요책임
1. Bytecode 실행
2. 메모리 할당 및 관리
3. GC(Garbage Collection) 수행
4. Thread 관리
5. Native Method 연동(JIT)


  • JVM 은 OS 위에서 동작하며 Bytecode를 해석 및 컴파일하여 실행하고, 메모리와 GC를 관리하는 런타임 엔진이다.
    JVM 은 Java Bytecode를 실행하는 가상 머신으로, 운영체제와 하드에어 위에서 동작하는 추상화된 실행 환경이다.
    Java 소스코드는 직접 OS에서 실행되지 않으며, 중간 산출물인 Bytecode(.class)를 통해 JVM에서 실행된다.

  1. Java 프로그램 실행 흐름
    2-1. 컴파일 단계
    .java -> javac -> .class (Bytecode) // 개발자가 작성한 .java 파일을 javac가 컴파일
    OS 독립적 중간 코드 생성 // OS가 독립적인 Bytecode(.class)생성2-2. Class Lading
    실행 시 필요한 클래스 동적 로딩, 최초 실행 시점에 메모리(Method Area)에 적재2-3. Runtime Data Area 배치
    로드된 클래스와 객체가 JVM 메모리 영역에 배치된다.
    Method Area
    Heap
    Stack 등 메모리 할당2-4. Execution Engine 실행
    Execution Engine이 Bytecode를 해석 또는 컴파일하여 실행한다.
    Interpreter
    JIT Compiler2-5. GC(Grbage Collection) 수행
    사용되지 않는 객체를 탐지하고 Heap 메모리에서 회수한다.

  • "컴파일된 Bytecode를 ClassLoader가 적재하고, Runtime 메모리에 배치된 뒤 Execution Engine이 실행하며, JVM은 GC로 메모리를 관리한다."

  1. Class Loader
    3-1. 구조: Class Loader는 .class 파일을 JVM 메모리에 적재하는 서브시스템이다.

    3-2. 로딩 3단계:
    1) Loading - Bytecode를 읽어 Method Area에 저장
    2) Linking - Verification -> Bytecode 무결성 검증
    - Preparation -> static 변수 메모리 할당 (기본값)
    - Resolution -> 심볼릭 참조 -> 실제 참조 변환
    3) Initialization : static 변수 값 할당, static block 실행

    3-3. Delegation Model
    Class Loader는 부모 위임 구조를 따른다.
    Bootstrap ClassLoader

    Exension ClassLoader

    Application ClassLoader
    장점으로는 보안성 확보, Core Java 클래스 위변조 방지, 클래스 중복 로딩 방지

  2. Runtime Data Area
    JVM 메모리는 Thread 공유 영역과 Thread 독립 영역으로 구분된다.
    4-1. Thread 공유 영역
    Heap : 객체 및 인스턴스 저장, GC 주요 대상
    Method Area : 클래스 메타데이터, static 변수, constant pool
    (Java 8+ 이후 PermGen 제거 -> Metaspace 사용)
    4-2. Thread 독립 영역
    JVM Stack : 메서드 호출 단위 Stack Frame 생성
    - Stack Frame 구성
    Local Variables
    Operand Stack
    Frame Data(Return Address 포함)
    PC Register : 현재 실행 중인 Bytecode 주소 저장
    Native Method Stack : JNI 기반 Native 코드 실행 시 사용


  • "Heap과 Method Area는 모든 Thread가 공유하고, JVM Stack, PC Register, Native Method Stack은 Thread별로 독립 생성된다.

  1. Excution Engine
    Excution Engine은 Bytecode를 실제 기계어 수준으로 변환 실행한다.
    5-1. Interpreter
    Bytecode 한 줄씩 해석, 느리지만 즉시 실행, 반복 코드 성능 저하 5-2 JIT(Just-In-Time) Compiler
    반복 실행(Hot code) 감지, Native Code 변환 후 캐싱, 재실행 시 고속 수행 5-3 Tiered Compilation
    실행 최적화 전략:
    1) 초기 -> Interpreter
    2) 반복증가 -> JIT 컴파일
    3) 장기 실행 -> 고도 최적화
    Startup 성능과 Runtime 성능을 동시에 확보한다.

  • 반복 실행 코드만 컴파일해 전체 성능을 최적화 한다.

  1. GC(Garbage Collection)
    GC는 Heap 메모리 자동 관리 메커니즘이다.
    6-1. GC 필요성
    메모리 누수 방지, 개발자 관리 부담 감소, 안정성 향상
    6-2. Generational GC 구조
    객체 생존 주기에 따라 Heap을 세대 구분한다.
    Young Generation
    -> Eden
    -> Survivor 0 / 1
    Old Generation
    동작 흐름:
    1) 객체 Eden 생성
    2) Minor GC 발생
    3) Survivor 이동
    4) 장기 생존 시 Old 승격
    6-3. GC 유형
    Minor GC -> Young 영역
    Major GC -> Old 영역
    Full GC -> 전체 Heap
    6-4. 주요 알고리즘
    Mark & Sweep
    Copying
    Mark & Compack
    각 알고리즘은 메모리 단편화 및 성능 특성에 차이가 있다.

  2. JVM이 제공하는 기술적 이점
    JVM 구조를 통해 Java는 다음 장점을 확보한다.

    1. 플랫폼 독립성
    2. 자동 메모리 관리
    3. 실행 안정성 (Bytecode 검증)
    4. JIT 기반 성능 최적화
    5. 동적 클래스 로딩
  3. 결론
    JVM은 단순 실행기가 아니라 다음을 통합 관리하는 런타임 플랫폼이다.

    • 클래스 로딩
    • 메모리 구조 관리
    • 실행 최적화
    • Carbage Collection

    특히 Backend 환경에서는 대용량 트래픽 및 멀티 스레드, 메모리 효율성과 직결되므로 JVM 내부 구조 이해는 성능 튜닝 및 장애 분석의 핵심 기반이 된다.

  4. 참고자료(References)
    Oracle Java Documentation
    https://docs.oracle.com/javase/specs/

Java Virtual Machine Specification (JVMS)
https://docs.oracle.com/javase/specs/jvms/

Baeldung — JVM Architecture
https://www.baeldung.com/jvm-architecture

GeeksforGeeks — JVM Memory Structure
https://www.geeksforgeeks.org/jvm-works-jvm-architecture/

Ready-For-Tech-Interview — JVM 정리
https://github.com/WooVictory/Ready-For-Tech-Interview/blob/master/Java/[Java]%20JVM.md

    
profile
Rookie

0개의 댓글