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 + 라이브러리 | 바이트코드 실행기 |
용도 | 개발 + 실행 | 실행 전용 | 실행 전용 |
대상 | 개발자 | 일반 사용자 | 내부 구성요소 |