JDK (Java Development Kit) 란?
JDK는 자바 개발키트(Java Development Kit)의 약자로 개발자들이 자바로 개발하는 데 사용되는 SDK 키트라 생각하면 됩니다.
그래서 JDK안에는 자바를 개발 시 필요한 라이브러리들과 javac(컴파일러), javadoc 등의 개발 도구들을 포함되어 있고, 개발을 하려면 자바 프로그램을 실행도 시켜줘야 하기 때문에 뒤에서 배울 JRE(Java Runtime Environment)도 함께 포함되어 있습니다.
💡 SDK란?
Software Development Kit (소프트웨어 개발 키트) 로, 하드웨어 플랫폼, 운영체제 또는 프로그래밍 언어 제작사가 제공하는 툴입니다. 키트의 요소는 제작사마다 다르며 이 SDK를 활용하여 애플리케이션을 개발할 수 있습니다.
JDK는 JVM, JRE를 모두 포함하고, 이외에 자바를 개발하는데 필요한 Java Development tools도 포함하고 있습니다.
JRE (Java Runtime Environment) 란?
JRE는 자바 실행환경(Java Runtime Environment)의 약자로서, JVM과 자바 프로그램을 실행(동작)시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지 입니다. 이외에도 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일(jar 파일)을 가지고 있습니다.
JRE는 기본적으로 JDK에 포함되어 있기 때문에 JDK를 설치하면 함께 설치됩니다.
기존에는 개별적으로 설치가 가능했지만 JDK11 버전부터는 따로 제공되지 않는다고 합니다.
정리하면, Java로 프로그램을 직접 개발하려면 JDK가 필요하고, 컴파일 된 Java 프로그램을 실행시키려면 JRE가 필요하다고 볼 수 있습니다.
JVM (Java Virtual Machine) 란?
JVM은 자바 가상머신(Java Virtual Machine)의 약자로서, 직역하면 자바를 실행하는 머신이라는 건데, 그냥 자바를 돌리는 프로그램 정도로 이해하면 됩니다.
자바로 작성된 모든 프로그램은 JVM(자바 가상 머신)에서만 실행될 수 있으므로, 자바 프로그램을 실행하기 위해서는 반드시 자바 가상 머신이 설치되어 있어야 합니다.
앞서 말했듯이 JVM은 자바 실행 환경 JRE(Java Runtime Environment)에 포함되어 있습니다. 그래서 현재 사용하는 컴퓨터의 운영체제에 맞는 자바 실행환경 (JRE)가 설치되어 있다면 자바 가상 머신이 설치되어 있다는 뜻이기도 합니다.
JAVA라는 프로그래밍 언어가 인기 있는 핵심 이유중 하나가 바로 이 JVM 개념인데,
JVM을 사용함으로써 얻는 가장 큰 이점은 JVM을 사용하면 자바 프로그램을 모든 플랫폼에서 제약 없이 동작 (OS에 종속적이지 않음) 하도록 할 수 있다는 점입니다.
OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요한데 그게 바로 JVM 입니다.
즉, JVM은 OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터 입니다.
Java 소스코드, 즉 원시코드(*.java)는 CPU가 인식을 하지 못하므로 기계어로 컴파일을 해줘야합니다.
- 위 그림과 같이 Java compiler (javac) 를 통해 .java 파일을 .class 라는 Java Byte Code로 컴파일 합니다.
- (단, 해당 코드는 직접 CPU에서 동작할 수 있는 코드가 아닙니다. 정확히 말하면 JVM이 이해할 수 있는 코드 입니다)
- 이 Byte Code를 기계어로 변환시키기 위해 가상 CPU가 필요한데, 이것이 JVM의 역할 입니다.
- JVM이 Byte Code를 기계어(Binary Code)로 변환 합니다. ( OS가 Byte Code를 이해할 수 있도록 해석 )
- 이렇게 JVM에 의해 컴파일된 기계어는 바로 CPU에서 실행되어 사용자에게 서비스를 제공해줍니다.
Reference : https://inpa.tistory.com/entry/JAVA-☕-JDK-JRE-JVM-개념-구성-원리-💯-완벽-총정리
https://doozi0316.tistory.com/entry/1주차-JVM은-무엇이며-자바-코드는-어떻게-실행하는-것인가