티스토리 뷰

IT/Java

☕ JVM 구조와 동작 원리 - Java 개발자라면 반드시 이해하고 있어야 할 기본기

Stv 2025. 4. 14. 13:49

목차


    1. JVM이란?

    : JVM(Java Virtual Machine)은 자바 애플리케이션을 실행시키는 가상 머신(Virtual Machine)이다.

     

    자바 소스코드(.java) -> 컴파일 -> 바이트코드(.class) -> jvm이 실행

     

    • JVM은 운영체제 위에서 작동하며 플랫폼 독립성을 제공한다.
      • "Write Once, Run Anywhere"가 가능한 이유

    2. JVM의 구성 요소

    1. Class Loader (클래스 로더 시스템)
      1. .class 파일을 JVM 메모리로 로드하고, 링크 및 초기화 진행
      2. Bootstrap -> Extension -> Application 로더 계층 구조
    2. Runtime Data Area
      1. JVM 내부에서 실행되는 데이터 저장 공간
      2. 아래에서 자세히 다룸(Heap, Stack 등)
    3. Execution Engine (실행 엔진)
      1. 로딩된 바이트코드를 실제 명령어로 해석 및 실행
      2. 인터프리터 + JIT(Just-In-Time) 컴파일러 사용
    4. Native Interface
      1. JVM과 OS 또는 C/C++ 등 네이티브 라이브러리와 연결하는 역할
    5. Native Method Libraries
      1. JNI를 통해 사용하는 네이티브 함수 라이브러리

    3. JVM 메모리 구조 (Runtime Data Area)

    1. Heap (힙 영역)
      1. 객체 인스턴스가 저장되는 공간
      2. GC(Garbage Collection)의 대상
      3. Young -> Old로 객체가 이동 (Generational GC)
    2. Stack (스택 영역)
      1. 메서드 호출 시 생성되는 프레임 저장
      2. 각 프레임은 지역 변수, 반환 주소, 중간 연산 결과 포함
      3. 스레드마다 Stack 영역이 별도로 존재
    3. Method Area (or MetaSpace)
      1. 클래스 메타데이터(클래스 정보, static 변수 등) 저장
      2. Java 8부터는 Permgen -> MetaSpace로 변경 (메모리 제한 없음)
    4. PC Register
      1. 각 스레드가 어떤 명령어를 실행 중인지 기록
    5. Native Method Stack
      1. C/C++로 작성된 네이티브 코드 실행 시 사용

    4. GC(Garbage Collection)의 기본 동작

     

    📌 왜 GC가 중요한가?

    • Java는 개발자가 메모리 해제를 직접 하지 않음
    • 대신 JVM이 사용하지 않는 객체를 탐지 후 자동 해제

    🔄 동작 방식 (기본 개념)

    • Mark -> Sweep -> Compact 단계로 처리
    • 객체가 살아있는지 여부(mark) -> 제거(sweep) -> 메모리 재정렬(compact)

    5. GC 대상의 영역-Young, Old, Survivor

    영역  특징
    Young Generation 새로 생성된 객체기 위치, GC 자주 발생
    Eden 대부분의 객체는 여기에 생성됨
    Survivor S0/S1 살아남은 객체가 일시적으로 위치
    Old Generation 생명 주기가 긴 객체가 이동됨(Full GC 대상)

     

     

    6. 실무에서 알아야 할 GC 종류

    GC 종류 설명
    Serial GC 단일 스레드, 작은 메모리 환경에 적합
    Parallel GC 멀티스레드, Throughput 최적화
    CMS (Concurrent Mark Sweep) 응답 속도 위주, stop-the-world 시간 최소화
    G1 GC Java 9 이후 기본, 지역화된 Heap 관리로 pause time 최소화

     

    8. 실무에서 발생하는 주요 문제

    문제 원인
    메모리 누수(OutOfMemoryError) 객체 참조가 끊기지 않음
    StackOverflowError 재귀 호출 또는 무한 루프
    Full GC 반복 발생 Old 명령이 꽉 찼고 객체가 계쏙 살이있음
    GC 튜닝 실패 애플리케이션 특성과 GC 특성 미스매치

     

    ✅ 마무리 요약

    • JVM은 자바 프로그램 실행을 담당하는 핵심 구성 요소이며, Class Loader, Runtime Data Area, Execution Engine으로 구성된다.
    • JVM의 메모리 구조를 이해하면 GC 튜닝, 성능 최적화, 디버깅이 쉬워진다.

    🔜 다음 포스팅에서는 Java의 메모리 영역과 GC (Young/Old, G1, CMS 차이)에 대해 다뤄보고자 한다.

    • JVM에서 객체는 어떻게 이동하는가?
    • GC 튜닝 시 어떤 포인트를 보는가?

    'IT > Java' 카테고리의 다른 글

    Java의 메모리 구조와 GC 완전 정복  (0) 2025.04.14
    어떤 버전의 JDK를 사용해야 할까?  (3) 2024.03.23