cs

[Java] JVM, JRE, JDK

icodesiuuuu 2025. 4. 24. 18:34

🧩 1. JVM (Java Virtual Machine) — Java 실행의 핵심

📌 JVM이란?

JVM은 Java 프로그램이 실행되는 가상의 컴퓨터입니다.
개발자가 작성한 .java 소스 파일은 javac 컴파일러를 통해 바이트코드(.class)로 변환되며, 이 바이트코드는 JVM이 실행합니다.

✅ JVM의 역할

  • 바이트코드 실행 (실제 OS에서 동작하도록 변환)
  • 메모리 관리 (Heap, Stack, Method Area)
  • Garbage Collection (자동 메모리 회수)
  • 예외 처리, 멀티스레딩 지원

🧠 JVM 내부 구조

[ JVM ]
 ├── Class Loader: .class 파일을 로드
 ├── Execution Engine: 명령어 실행 (JIT 컴파일 포함)
 ├── Memory Area
 │    ├── Heap (객체 저장)
 │    ├── Stack (메서드 호출/지역 변수)
 │    ├── Method Area (클래스, 상수)
 │    ├── PC Register
 │    └── Native Method Stack

 

 

 

☕ 2. JRE (Java Runtime Environment) — Java 실행 환경

📌 JRE란?

JRE는 Java 프로그램을 실행할 수 있는 환경을 말합니다.
즉, 사용자가 Java 애플리케이션을 실행할 때 필요한 패키지입니다.

✅ JRE 구성

  • JVM (바이트코드 실행기)
  • Java API 라이브러리 (rt.jar 등)
  • 기타 리소스 및 설정 파일

🛠️ 용도

  • Java 프로그램을 실행만 하고 싶을 때
  • 예: Java로 만든 게임, 툴 등을 실행할 때

📍 : JRE는 컴파일 기능이 없습니다! (코드를 작성하고 빌드하려면 JDK 필요)

 

 

 

💻 3. JDK (Java Development Kit) — Java 개발 도구 세트

📌 JDK란?

JDK는 Java 애플리케이션을 개발하기 위한 풀 패키지입니다.
JRE를 포함하고, 여기에 개발에 필요한 컴파일러와 각종 도구가 추가되어 있습니다.

✅ JDK 구성 요소

  • JRE 포함 (JVM + API)
  • javac: Java 컴파일러
  • jar: 패키징 도구
  • javadoc: 문서 생성기
  • jdb: 디버거
  • 기타 개발 툴 (javap, jshell, javah 등)

🧑‍💻 용도

  • Java 소스를 작성, 컴파일, 빌드, 테스트, 디버깅
  • IDE (예: IntelliJ, Eclipse)는 내부적으로 JDK를 사용함

 

 

🔄 JDK, JRE, JVM의 포함 관계

아래 그림처럼 JDK > JRE > JVM의 포함 관계를 가집니다:

JDK
├── JRE
│   ├── JVM
구분 포함 관계 주요 역할 대상
JVM - 바이트코드 실행 모든 OS
JRE JVM 포함 실행 환경 제공 사용자
JDK JRE 포함 개발 도구 포함 개발자

 

 

🎯 정리

항목 JDK JRE JVM
정의 Java 개발 키트 Java 실행 환경 Java 가상 머신
포함 여부 JRE + 도구 JVM + 라이브러리 바이트코드 실행기
용도 개발 + 실행 실행 전용 실행 전용
대상 개발자 일반 사용자 내부 구성요소