IT 개발 라이프/Back_End

JRE, JDK, JVM: 자바의 핵심 구성 요소 🚀

10Biliion 2024. 12. 18. 18:01

자바 개발을 처음 시작하거나 사용하는 도중에 JRE, JDK, JVM이라는 용어를 자주 접하게 됩니다. 이번 글에서는 각각의 역할과 차이점을 명확히 정리해 보겠습니다. 😊


1. JVM (Java Virtual Machine) 🖥️

정의

JVM은 자바 프로그램을 실행하는 가상 머신으로, 자바 바이트코드(.class 파일)를 OS와 하드웨어에 맞게 해석하고 실행합니다.

주요 역할

  1. 로딩: 클래스 파일(.class)을 메모리에 로드합니다.
  2. 바이트코드 해석: 바이트코드를 기계어로 변환합니다.
  3. 메모리 관리: 자바 힙, 메서드 영역 등을 관리하고, 가비지 컬렉션을 수행합니다.

구조

  • 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와 함께 컴파일러, 디버거 등의 개발 도구를 포함합니다.

구성 요소

  1. JRE: 실행 환경.
  2. javac (컴파일러): 자바 소스코드(.java)를 바이트코드(.class)로 변환합니다.
  3. jdb (디버거): 디버깅 도구.
  4. jar (아카이브 생성): JAR 파일을 생성하고 관리하는 도구.
  5. java (JVM 실행기): 바이트코드를 실행.

JDK의 역할

  • 자바 프로그램 작성, 컴파일, 디버깅, 배포까지 전체 개발 사이클을 지원합니다.

JRE, JDK, JVM 비교 📝

구성 요소 역할  관계
JVM 자바 바이트코드 실행 JRE와 JDK에 포함
JRE 자바 프로그램 실행 환경 제공 JVM + 라이브러리
JDK 자바 개발 도구 제공 JRE + 컴파일러 등 도구

사용 예시 🌟

  1. JVM만 사용하는 경우
    • 자바 프로그램을 실행할 때, JRE에 포함된 JVM이 사용됩니다.
  2. JDK 사용하는 경우
    • 소스코드를 작성하고 컴파일할 때, JDK를 사용합니다.
// JDK를 사용하여 컴파일 및 실행
$ javac HelloWorld.java
$ java HelloWorld

요약 🎯

  • JVM: 자바 프로그램 실행의 핵심.
  • JRE: 실행 환경 제공.
  • JDK: 개발 환경 제공.