JVM, JRE, JDK을 간략히 소개하면 다음과 같다 :
다소 헷갈리지만 Java 언어의 특징을 알면 이해가 쉽다.
자바의 원칙은 WORA("Write Once, Read Anywhere")이다. 한 번 작성한 코드는 어디서든 실행할 수 있다는 의미이다. 지금은 특별할 것 없어 보이지만, 자바가 처음 등장한 1995년만 해도 각 운영체제에 맞게 소스코드를 별도로 작성해야 했기의 자바의 WORA는 매우 혁신적인 것이었다고 한다.
개발자가 고급 언어로 작성한 자바의 소스코드(.java
)는, 동일한 코드라면 어느 운영체제에서 컴파일하든 똑같은 형태의 자바 바이트코드(.class
)로 컴파일된다. 자바 바이트코드는 아직 컴퓨터가 이해할 수 있는 완전한 기계어는 아니다.
자바 애플리케이션을 작동시키는 핵심 소프트웨어인 JVM(Java Virtual Machine)은 이 자바 바이트코드를 실행하는 운영체제 맞게 해석하여 실행해준다. 사용자는 자신의 운영체제에 맞는 JVM만 설치되어 있다면 어떤 자바 애플리케이션이든 실행할 수 있는 것이다.
Java Virtual Machine
자바 가상 머신(JVM)은 자바 애플리케이션 작동에 관한 추상적 개념인데, 맥락마다 가리키는 JVM의 정의가 조금씩 차이가 있어 헷갈릴 수 있다.
java
명령어를 통해 자바 바이트코드를 실행할 때마다 JVM 인스턴스가 생성된다.JVM 사양(specification)은 JVM을 어떻게 구현해야 할 지에 따른 명세이다. 오라클이 자바 상표를 소유하고 있기 때문에 다른 제조사에서 JVM을 구현할 때에는 오라클의 JVM 사양을 따라야 한다. JVM 사양은 상세하게 정의되어있지 않기 때문에 제조사마다 구현 방식이 다를 수 있지만, 하나의 명세를 따르기 때문에 JVM간의 상호운용성이 보장된다.
JVM은 사양의 구현체를 가리키기도 한다. 예를 들어 Hotspot은 Sun Microsystems가 개발하고 현재는 오라클이 관리하고 있는 JVM으로, 현재 가장 널리 사용되고 있는 구현된 JVM이다. JVM은 JRE의 한 부분이기도 하다.
때로는 실행 중인 JVM 인스턴스를 가리키기도 한다. 애플리케이션이 실행될 때마다 JVM 인스턴스가 생성된다. 개발자들이 '현재 JVM의 리소스' 등에 관해 얘기할 때의 JVM은 인스턴스를 말한다.
Java Runtime Environment
소프트웨어 프로그램을 실행하기 위해서는 실행할 환경(런타임 환경)이 필요하다. 윈도우, 맥, 리눅스 등의 운영체제가 이러한 런타임 환경이 된다. 자바는 운영체제를 직접 사용하는 것이 아니라 그 위에 JVM을 띄워 운영체제 간의 차이를 조정한다. JRE을 통해 자바를 위한 일관적인 런타임 환경을 조성함으로써 자바 프로그램이 운영체제 독립적으로 실행될 수 있게 되는 것이다.
JRE는 클래스로더, 라이브러리, JVM을 포함한다. 애플리케이션이 실행되면 클래스로더는 표준 라이브러리, 확장 라이브러리와 애플리케이션을 구성하는 클래스들을 필요할 때마다 동적으로 로드하고 JVM을 통해 코드를 한 줄씩 실행한다.
java
명령어를 사용할 수 있다.Java Development Kit
JDK는 자바 애플리케이션 개발을 위한 여러 소프트웨어의 모음이다. JDK는 개발을 위한 편의 도구를 갖고 있는데, 가장 대표적인 것이 컴파일러이다. 프로그램을 구성하는 수많은 파일을 하나의 .jar
파일로 압축하는 JAR 도구도 갖고 있다.
javac
를 실행하려면 JDK가 설치되어있어야 한다.오라클은 무료 버전인 OpenJDK와 유료 버전인 OracleJDK 두 종류를 릴리즈하고 있다. 개인이나 소규모 기업에서 사용하기에는 OpenJDK도 충분한 안정성을 가지고 있다.
오라클 뿐 아니라 Eclipse, IBM, Amazon 등 다른 회사에서도 오라클 표준에 따라 JDK를 배포하고 있다. 아마존의 Corretto JDK는 자사 AWS 환경에서 동작하는데 최적화 되어있다.