[Java] JVM, JRE, JDK 차이

dondonee·2023년 11월 22일
0

JVM, JRE, JDK 차이

JVM, JRE, JDK을 간략히 소개하면 다음과 같다 :

  • JVM(Java Virtual Machine) :
    Java 프로그램을 한 줄씩 실행하는 소프트웨어
  • JRE(Java Runtime Environment) :
    JVM이 Java 애플리케이션을 실행하기 위한 환경을 구성해주는 소프트웨어
  • JDK(Java Development Kit) :
    Java 애플리케이션 개발을 위한 소프트웨어 도구의 모음

다소 헷갈리지만 Java 언어의 특징을 알면 이해가 쉽다.


Java 언어의 특징

자바의 원칙은 WORA("Write Once, Read Anywhere")이다. 한 번 작성한 코드는 어디서든 실행할 수 있다는 의미이다. 지금은 특별할 것 없어 보이지만, 자바가 처음 등장한 1995년만 해도 각 운영체제에 맞게 소스코드를 별도로 작성해야 했기의 자바의 WORA는 매우 혁신적인 것이었다고 한다.

개발자가 고급 언어로 작성한 자바의 소스코드(.java)는, 동일한 코드라면 어느 운영체제에서 컴파일하든 똑같은 형태의 자바 바이트코드(.class)로 컴파일된다. 자바 바이트코드는 아직 컴퓨터가 이해할 수 있는 완전한 기계어는 아니다.

자바 애플리케이션을 작동시키는 핵심 소프트웨어인 JVM(Java Virtual Machine)은 이 자바 바이트코드를 실행하는 운영체제 맞게 해석하여 실행해준다. 사용자는 자신의 운영체제에 맞는 JVM만 설치되어 있다면 어떤 자바 애플리케이션이든 실행할 수 있는 것이다.

  • 현재는 가상머신을 사용하는 언어는 자바 외에도 많으며 코틀린 등 몇몇 언어는 자바 바이트 코드로 컴파일되고 JVM에서 실행된다고 한다.

✔️ JVM

Java Virtual Machine

자바 가상 머신(JVM)은 자바 애플리케이션 작동에 관한 추상적 개념인데, 맥락마다 가리키는 JVM의 정의가 조금씩 차이가 있어 헷갈릴 수 있다.

JVM의 3가지 정의

  1. 사양: JVM을 어떻게 구현해야 할 지에 대한 사양이다.
  2. 사양의 구현: JVM 사양을 구현한 것이다.
  3. 인스턴스: java 명령어를 통해 자바 바이트코드를 실행할 때마다 JVM 인스턴스가 생성된다.

1. 사양

JVM 사양(specification)은 JVM을 어떻게 구현해야 할 지에 따른 명세이다. 오라클이 자바 상표를 소유하고 있기 때문에 다른 제조사에서 JVM을 구현할 때에는 오라클의 JVM 사양을 따라야 한다. JVM 사양은 상세하게 정의되어있지 않기 때문에 제조사마다 구현 방식이 다를 수 있지만, 하나의 명세를 따르기 때문에 JVM간의 상호운용성이 보장된다.

2. 구현체

JVM은 사양의 구현체를 가리키기도 한다. 예를 들어 Hotspot은 Sun Microsystems가 개발하고 현재는 오라클이 관리하고 있는 JVM으로, 현재 가장 널리 사용되고 있는 구현된 JVM이다. JVM은 JRE의 한 부분이기도 하다.

3. 인스턴스

때로는 실행 중인 JVM 인스턴스를 가리키기도 한다. 애플리케이션이 실행될 때마다 JVM 인스턴스가 생성된다. 개발자들이 '현재 JVM의 리소스' 등에 관해 얘기할 때의 JVM은 인스턴스를 말한다.


✔️ JRE

Java Runtime Environment

소프트웨어 프로그램을 실행하기 위해서는 실행할 환경(런타임 환경)이 필요하다. 윈도우, 맥, 리눅스 등의 운영체제가 이러한 런타임 환경이 된다. 자바는 운영체제를 직접 사용하는 것이 아니라 그 위에 JVM을 띄워 운영체제 간의 차이를 조정한다. JRE을 통해 자바를 위한 일관적인 런타임 환경을 조성함으로써 자바 프로그램이 운영체제 독립적으로 실행될 수 있게 되는 것이다.

JRE는 클래스로더, 라이브러리, JVM을 포함한다. 애플리케이션이 실행되면 클래스로더는 표준 라이브러리, 확장 라이브러리와 애플리케이션을 구성하는 클래스들을 필요할 때마다 동적으로 로드하고 JVM을 통해 코드를 한 줄씩 실행한다.

  • JRE를 설치하면 자바 프로그램을 실행하는 java 명령어를 사용할 수 있다.
  • JRE는 자바 플랫폼 버전에 따라 업데이트 되며, 버전 번호는 자바 플랫폼의 번호를 따른다. 예를 들어 JRE 1.8은 Java 8을 위한 소프트웨어이다. (JDK와 달리 JRE는 선택의 여지가 별로 없다. 아주 특별한 경우가 아니라면 JDK에 기본 포함된 JRE를 사용한다.)

✔️ JDK

Java Development Kit

JDK는 자바 애플리케이션 개발을 위한 여러 소프트웨어의 모음이다. JDK는 개발을 위한 편의 도구를 갖고 있는데, 가장 대표적인 것이 컴파일러이다. 프로그램을 구성하는 수많은 파일을 하나의 .jar 파일로 압축하는 JAR 도구도 갖고 있다.

  • 컴파일러는 개발자만 사용하기 때문에 실행 소프트웨어인 JRE는 갖고있을 필요가 없다.
  • 자바 컴파일 명령인 javac를 실행하려면 JDK가 설치되어있어야 한다.

JDK 종류

오라클은 무료 버전인 OpenJDK와 유료 버전인 OracleJDK 두 종류를 릴리즈하고 있다. 개인이나 소규모 기업에서 사용하기에는 OpenJDK도 충분한 안정성을 가지고 있다.

오라클 뿐 아니라 Eclipse, IBM, Amazon 등 다른 회사에서도 오라클 표준에 따라 JDK를 배포하고 있다. 아마존의 Corretto JDK는 자사 AWS 환경에서 동작하는데 최적화 되어있다.



🔗 References

0개의 댓글