JVM, JRE, JDK의 차이 + JDK의 종류

2024. 11. 27. 17:12Java/Java 원리

1. JVM (Java Virtual Machine)

  • 역할: 자바 애플리케이션을 실행하는 가상 머신. 자바 프로그램이 운영 체제에 독립적으로 실행될 수 있도록 하는 가상 환경을 제공한다. 
  • 플랫폼 독립성: 자바 애플리케이션이 어떤 운영 체제에서 실행되든 동일한 바이트 코드가 JVM을 통해 실행되기 때에, 자바는 플랫폼 독립적이다.
  • 주요 기능
    • 바이트 코드 실행: 자바 소스 코드가 컴파일되어 생성된 바이트 코드를 실행
    • 메모리 관리: JVM은 힙(heap)과 스택(stack) 영역을 관리하고, 가비지 컬렉션(Garbage Collection)을 통해 메모리 관리를 자동으로 수행
    • 호환성 유지: 자바는 "Write Once, Run Anywhere"라는 슬로건을 가지고 있으며, JVM은 이를 가능하게 해준다. JVM이 모든 운영 체제에 맞게 적응하여 바이트 코드를 실행

 

2. JRE (Java Runtime Environment)

  • 역할: 자바 애플리케이션을 실행하는 데 필요한 실행 환경을 제공한다.
  • 구성 요소
    • JVM: 자바 프로그램을 실행하는 가상 머신
    • 자바 클래스 라이브러리 (Java Class Libraries): 자바 프로그램이 실행되는 데 필요한 기본적인 라이브러리들이 포함됨. (파일 입출력, 데이터베이스 연결, 네트워킹 등을 위한 클래스들) 
    • 기타 리소스: 실행에 필요한 설정 파일과 다른 리소스들

JRE는 자바 애플리케이션을 실행하려는 사용자가 설치하는 환경이다. 만약 자바 애플리케이션을 개발하려면 JDK를 설치해야 하지만, 이미 작성된 자바 프로그램을 실행하려면 JRE만 설치하면 된다. 

 

3. JDK (Java Development Kit)

 

  • 역할: 자바 애플리케이션을 개발하고, 컴파일하고, 실행하는 데 필요한 도구들을 제공. 종합 개발 패키지.
  • 구성 요소
    • JRE: 자바 프로그램을 실행할 수 있는 환경을 제공
    • 자바 컴파일러 (javac): 자바 소스 코드를 바이트 코드로 변환하는 도구입니다. javac는 자바 코드(.java)를 컴파일하여 .class 파일로 만든다. 
    • 디버거 (jdb): 자바 프로그램을 디버깅하는 도구
    • 자바 API 문서: 자바의 다양한 라이브러리 및 클래스에 대한 공식 문서가 포함됨
    • 기타 도구들: 자바 애플리케이션을 배포하거나 테스트하는 데 도움이 되는 다양한 도구들이 포함됨

JDK는 자바 개발자가 자바 애플리케이션을 작성, 컴파일, 테스트할 수 있도록 필요한 모든 도구를 제공한다. 즉, 자바 개발을 하려면 반드시 JDK를 설치해야 한다. 

 

4. JVM, JRE, JDK 관계

  • JVM: 자바 애플리케이션을 실제로 실행하는 가상 머신. JVM은 바이트 코드를 해석하여 운영 체제에서 실행될 수 있도록 한다.
  • JRE: 자바 애플리케이션을 실행하기 위한 환경. JRE는 JVM을 포함하고 있으며, 자바 애플리케이션을 실행하는 데 필요한 클래스 라이브러리와 설정을 제공한다. 
  • JDK: 자바 애플리케이션을 개발하는 데 필요한 도구들이 모여 있는 패키지. JDK는 JRE를 포함하고 있으며, 자바 프로그램을 개발하고 컴파일할 수 있는 도구들이 포함된다. 
항목 정의 포함된 내용
JVM 자바 애플리케이션을 실행하는 가상 머신 자바 바이트 코드 실행, 메모리 관리, 가비지 컬렉션 등
JRE 자바 애플리케이션을 실행할 수 있는 환경 JVM, 자바 클래스 라이브러리, 리소스 등
JDK 자바 애플리케이션을 개발하는 데 필요한 도구 모음 JRE, 자바 컴파일러, 디버깅 도구 등

 

5. JDK의 종류

Java를 개발하려면 반드시 JDK(Java Development Kit)가 필요하다. 하지만 JDK는 하나의 버전만 존재하는 것이 아니라, 여러 가지 종류가 있다. JDK는 OpenJDK와 Oracle JDK로 나뉘며, OpenJDK를 기반으로 여러 기업이 배포판을 제공한다. 일반적인 개발자라면 OpenJDK 기반 배포판을 선택하는 것이 가장 적절하며, 기업 환경에서는 라이선스와 지원 정책을 고려하여 적절한 JDK를 선택하면 된다. 

 

5-1. JDK의 큰 분류

  1. OpenJDK: Java의 공식 오픈소스 구현
  2. Oracle JDK: OpenJDK를 기반으로 Oracle에서 추가적인 수정 및 기능을 포함한 상업용 JDK

5-2. OpenJDK란?

  • OpenJDK(Open Java Development Kit): Java의 공식적인 오픈소스 구현체이다. Oracle이 관리하지만, 누구나 OpenJDK의 소스 코드를 가져와서 빌드하고 배포할 수 있다.
  • OpenJDK 기반 배포판: 여러 기업에서 OpenJDK를 기반으로 자체적인 JDK 배포판을 만들고 제공하고 있다.
  • 모든 OpenJDK 기반 배포판은 OpenJDK 소스를 기반으로 하지만, 각 배포판마다 최적화된 성능, 보안 패치 제공 방식, 지원 정책이 다를 수 있다.
  • 대표적인 OpenJDK 기반 배포판 
OpenJDK 배포판 제공 회사 특징 
Adoptium (Eclipse Temurin) Eclipse 재단 OpenJDK 기반의 무료 배포판, 개발자 커뮤니티 중심
Amazon Corretto Amazon AWS 환경에 최적화, 장기 지원 (LTS) 제공
Azul Zulu Azul Systems 기업용 최적화, 유료 지원 가능
IBM Semeru IBM 엔터프라이즈 환경 최적화
GraalVM Oracle 고성능 네이티브 컴파일 지원

 

5-3. Oracle JDK란?

  • Oracle JDK는 OpenJDK를 기반으로 하지만, Oracle에서 추가적인 기능을 포함한 상업용 JDK이다.
  • 과거에는 Oracle JDK가 성능 면에서 더 뛰어났지만, 현재는 OpenJDK와 거의 동일한 수준이며, 기업이 아닌 개인 개발자라면 OpenJDK 기반 배포판을 사용하는 것이 일반적이다.
  • OpenJDK와 Oracle JDK의 차이
비교 항목 OpenJDK Oracle JDK
라이선스 무료 (GPL) 상업적 사용 시 유료
제공 회사 여러 회사 Oracle 단독
기능 기본 Java 기능 제공 추가적인 성능 최적화 및 모니터링 기능 포함
지원 기간 보통 6개월 (LTS는 각 배포판에서 제공) 장기 지원 (LTS) 가능하지만 유료

 

5-4. JDK를 선택할 때 고려할 점

어떤 JDK를 사용할지는 개발 환경과 필요에 따라 다르다.

  • 일반적인 개발 & 무료 사용 → OpenJDK 기반 배포판 (Adoptium, Amazon Corretto 등)
  • AWS 클라우드 환경 → Amazon Corretto
  • 기업 환경에서 안정적인 지원 필요 → Azul Zulu, IBM Semeru
  • 최고 성능과 네이티브 컴파일 필요 → GraalVM
  • Oracle의 공식 지원이 필요한 경우 → Oracle JDK (유료)