자바 개발을 처음 시작하거나 사용하는 도중에 JRE, JDK, JVM이라는 용어를 자주 접하게 됩니다. 이번 글에서는 각각의 역할과 차이점을 명확히 정리해 보겠습니다. 😊
1. JVM (Java Virtual Machine) 🖥️
정의
JVM은 자바 프로그램을 실행하는 가상 머신으로, 자바 바이트코드(.class 파일)를 OS와 하드웨어에 맞게 해석하고 실행합니다.
주요 역할
- 로딩: 클래스 파일(.class)을 메모리에 로드합니다.
- 바이트코드 해석: 바이트코드를 기계어로 변환합니다.
- 메모리 관리: 자바 힙, 메서드 영역 등을 관리하고, 가비지 컬렉션을 수행합니다.
구조
- Class Loader: 클래스 파일을 로드합니다.
- Execution Engine: 바이트코드를 해석하고 실행합니다.
- Garbage Collector: 불필요한 객체를 제거해 메모리를 관리합니다.
- Runtime Data Area: JVM이 실행 중 사용하는 메모리 영역으로, 주요 구성 요소는 다음과 같습니다.
- Heap: 객체가 저장되는 공간.
- Stack: 메서드 호출과 지역 변수를 저장.
- Method Area: 클래스와 메서드 정보 저장.
2. JRE (Java Runtime Environment) 🌐
정의
JRE는 자바 애플리케이션을 실행하기 위한 실행 환경입니다. JVM과 자바 프로그램 실행에 필요한 라이브러리 및 기타 파일로 구성됩니다.
구성 요소
- JVM: JRE에 포함되어 자바 프로그램을 실행합니다.
- 라이브러리(Java API): 자바 애플리케이션에서 사용하는 필수 클래스와 패키지(예: java.util, java.io 등).
JRE의 역할
개발이 아닌, 실행에 필요한 환경만 제공합니다. 자바 프로그램을 실행하고자 할 때, JRE만 설치되어 있어도 충분합니다.
3. JDK (Java Development Kit) 🛠️
정의
JDK는 자바 애플리케이션을 개발 및 실행하기 위한 도구입니다. 개발자에게 필요한 JRE와 함께 컴파일러, 디버거 등의 개발 도구를 포함합니다.
구성 요소
- JRE: 실행 환경.
- javac (컴파일러): 자바 소스코드(.java)를 바이트코드(.class)로 변환합니다.
- jdb (디버거): 디버깅 도구.
- jar (아카이브 생성): JAR 파일을 생성하고 관리하는 도구.
- java (JVM 실행기): 바이트코드를 실행.
JDK의 역할
- 자바 프로그램 작성, 컴파일, 디버깅, 배포까지 전체 개발 사이클을 지원합니다.
JRE, JDK, JVM 비교 📝
구성 요소 | 역할 | 관계 |
JVM | 자바 바이트코드 실행 | JRE와 JDK에 포함 |
JRE | 자바 프로그램 실행 환경 제공 | JVM + 라이브러리 |
JDK | 자바 개발 도구 제공 | JRE + 컴파일러 등 도구 |
사용 예시 🌟
- JVM만 사용하는 경우
- 자바 프로그램을 실행할 때, JRE에 포함된 JVM이 사용됩니다.
- JDK 사용하는 경우
- 소스코드를 작성하고 컴파일할 때, JDK를 사용합니다.
// JDK를 사용하여 컴파일 및 실행
$ javac HelloWorld.java
$ java HelloWorld
요약 🎯
- JVM: 자바 프로그램 실행의 핵심.
- JRE: 실행 환경 제공.
- JDK: 개발 환경 제공.
'IT 개발 라이프 > Back_End' 카테고리의 다른 글
자바(Java)의 메모리 영역 (1) | 2024.12.19 |
---|---|
자바의 가비지 컬렉터 (Garbage Collector) 🗑️ (0) | 2024.12.18 |
자바에서의 Stack, Queue, Deque ✨ (0) | 2024.12.18 |
자바 ReflectionUtils: 리플렉션을 쉽게 활용하는 방법 🛠️ (0) | 2024.12.16 |
추상 클래스와 인터페이스 (0) | 2024.12.11 |