JDK, JRE, JVM

2025. 9. 30. 22:03·JAVA

개요: 포함 관계

세 요소의 관계를 가장 쉽게 이해하는 방법은 포함 관계로 보는 것입니다.

  • JDK (Java Development Kit) 는 JRE를 포함합니다.
  • JRE (Java Runtime Environment) 는 JVM을 포함합니다.

따라서 개발자는 JDK를 설치하며, 최종 사용자는 JRE만 설치하여 Java 애플리케이션을 실행합니다.

 


 

1. JVM (Java Virtual Machine)

JVM은 "자바 가상 머신"의 약자로, Java의 핵심 철학인 "한 번 작성하면, 어디서든 실행된다 (Write Once, Run Anywhere)"를 가능하게 하는 기술적 기반입니다.

  • 핵심 역할: Java 바이트코드(Bytecode)를 실행하는 가상의 컴퓨터(소프트웨어)입니다. 실제 물리적 컴퓨터의 CPU나 운영체제에 종속되지 않고, 바이트코드를 해당 플랫폼에 맞는 기계어로 해석하고 실행하는 역할을 담당합니다.
  • 주요 특징:
    • 플랫폼 독립성: 각 운영체제(Windows, macOS, Linux 등)에 맞는 JVM이 설치되어 있기만 하면, 동일한 바이트코드(.class 파일)를 수정 없이 실행할 수 있습니다.
    • 메모리 관리: 가비지 컬렉션(Garbage Collection)을 통해 개발자가 직접 메모리를 관리해야 하는 부담을 줄여줍니다.
    • 스펙과 구현: JVM은 그 자체로 추상적인 사양(Specification)이며, Oracle의 HotSpot VM, OpenJ9, GraalVM 등 여러 벤더가 이 사양을 만족하는 구현체(Implementation)를 제공합니다.
  • 주요 구성 요소:
    • 클래스 로더 (Class Loader): 컴파일된 .class 파일을 런타임 데이터 영역으로 로드합니다.
    • 런타임 데이터 영역 (Runtime Data Areas): JVM이 프로그램을 실행하기 위해 사용하는 메모리 영역입니다. (Method Area, Heap, Stack Area 등)
    • 실행 엔진 (Execution Engine): 클래스 로더를 통해 로드된 바이트코드를 해석(Interpreter)하거나, JIT(Just-In-Time) 컴파일러를 통해 네이티브 코드로 변환하여 실행합니다.

 

2. JRE (Java Runtime Environment)

JRE는 "자바 런타임 환경"의 약자로, 컴파일된 Java 애플리케이션을 실행하는 데 필요한 모든 것을 포함하는 소프트웨어 패키지입니다.

  • 핵심 역할: Java 애플리케이션이 실행될 수 있는 환경을 제공합니다.
  • 주요 구성 요소:
    • JVM: 위에서 설명한 자바 가상 머신을 포함합니다.
    • Java 클래스 라이브러리 (Java Class Libraries): Java API를 포함하는 핵심 라이브러리 파일들입니다. java.lang, java.util, java.net 등 애플리케이션 구동에 필수적인 클래스들을 제공합니다. (예: rt.jar)
  • 사용 대상: Java로 개발된 프로그램을 사용하려는 **최종 사용자(End-user)**입니다. 개발 도구는 포함되어 있지 않으므로, JRE만으로는 소스 코드를 컴파일할 수 없습니다.

 

3. JDK (Java Development Kit)

JDK는 "자바 개발 키트"의 약자로, Java 애플리케이션을 개발하는 데 필요한 모든 도구를 포함하는 포괄적인 소프트웨어 개발 키트입니다.

  • 핵심 역할: Java 소스 코드를 작성하고, 컴파일하며, 디버깅하고, 실행하는 데 필요한 모든 환경과 도구를 제공합니다.
  • 주요 구성 요소:
    • JRE: JDK는 JRE를 완전히 포함하므로, 개발자는 JDK 설치 후 별도로 JRE를 설치할 필요가 없습니다.
    • 개발 도구 (Development Tools):
      • javac: 자바 소스 코드(.java)를 바이트코드(.class)로 변환하는 컴파일러
      • java: 컴파일된 바이트코드를 실행하는 런처 (실제로는 JRE에 포함)
      • javadoc: 소스 코드 주석을 기반으로 API 문서를 생성하는 도구
      • jdb: Java 애플리케이션의 버그를 찾는 데 사용되는 디버거
      • jar: 관련 클래스 라이브러리들을 하나의 파일로 묶는 아카이버
  • 사용 대상: Java 애플리케이션을 개발하려는 소프트웨어 개발자입니다.

 

4. 주요 차이점 요약

구분 (Component) 핵심 역할 (Core Role) 주요 구성 요소 (Key Components) 사용 대상 (Target User)
JVM 바이트코드 실행 클래스 로더, 런타임 데이터 영역, 실행 엔진 - (JRE의 일부)
JRE Java 애플리케이션 실행 JVM + 클래스 라이브러리 최종 사용자
JDK Java 애플리케이션 개발 JRE + 개발 도구 (javac, jdb 등) 개발자

'JAVA' 카테고리의 다른 글

Serializable  (0) 2025.12.04
about JVM  (0) 2025.09.30
Primitive Type과 Reference Type  (0) 2025.09.30
자바의 hashCode(), hash()에 대하여  (0) 2025.03.10
'JAVA' 카테고리의 다른 글
  • Serializable
  • about JVM
  • Primitive Type과 Reference Type
  • 자바의 hashCode(), hash()에 대하여
이경빈
이경빈
이 블로그의 게시글을 바탕으로 학습하는 것을 권장하지 않습니다. 이 블로그의 게시글을 통해 무엇을 학습할 수 있고 무엇을 학습해야 하는지 알 수 있는 이정표 및 목차가 되었으면 합니다.
  • 이경빈
    메모용 블로그
    이경빈
    • 분류 전체보기 (44)
      • 기본개념 (0)
      • Git (2)
      • OOP (객체 지향 프로그래밍) (1)
      • CS (2)
      • JAVA (7)
        • 문법 (0)
        • stream api (1)
        • 자료구조 (1)
      • Spring (11)
        • Spring Context (1)
        • Spring beans (1)
        • Spring MVC (0)
        • RestTemplate (1)
        • JPA (1)
        • Mockito (1)
        • Spring Security (4)
        • Async (1)
      • Gradle (0)
      • 컴퓨터 네트워크 (6)
      • DBMS (2)
        • SQL (2)
      • 자료구조 (1)
      • 위클리페이퍼 (5)
      • AWS (0)
      • 프로젝트 (3)
        • 트러블슈팅 (1)
        • 회고 (2)
        • git hub 프로젝트 (0)
        • git in java (0)
      • 운영체제 (1)
      • Project (0)
        • 고민거리들 (0)
        • ai에게 요구한 수정사항 (0)
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
이경빈
JDK, JRE, JVM
상단으로

티스토리툴바