자바는 표준 스펙(Standard Specification)과 구현(Implementation) 으로 나눌 수 있다.

표준 스펙은 자바 플랫폼에서 반드시 따라야 하는 규칙과 인터페이스를 정의합니다. 대표적으로는 다음과 같은 것들이 있습니다.

(2) 자바 실행 라이브러리(Java Standard Library) : java.lang, java.util, java.io 등의 표준 라이브러리(클래스 및 API)들이 포함됩니다.
개발자가 프로그램을 쉽게 개발할 수 있도록 제공되는 라이브러리입니다.
(3) 자바 가상 머신(JVM, Java Virtual Machine) : 바이트코드(.class)를 실행하는 런타임 환경입니다.
Java 프로그램이 다양한 운영체제에서 실행할 수 있도록 해줍니다. (MacOS, Window, Linux 등)
JVM은 표준 스펙을 기반으로 여러 벤더(Oracle, OpenJDK, Azul 등)에서 구현할 수 있습니다.

표준 스펙을 기반으로 실제 동작하는 구현체들이 있습니다. 대표적인 것들은 다음과 같습니다.
(1) JDK(Java Development Kit) : Java 애플리케이션을 개발할 수 있도록 지원하는 개발 도구 모음입니다.
Javac(컴파일러), Java(JVM 실행기), 표준라이브러리, 개발도구(JConsole, JDB)등이 포함됩니다.
대표적인 JDK 구현체 : Oracle JDK, OpenJDK(자바의 오픈소스 구현), Amazon Corretto(AWS에서 제공), Azul Zulu, GraalVM 등이 있습니다.
(2) JVM 구현체 : Java 바이트코드를 실행하는 가상 머신 입니다.
대표적인 구현체 : HotSpot JVM(Oracle, OpenJDK에서 사용), OpenJ9(IBM에서 개발), GraalVM(Oracle에서 제공하는 최적화된 JVM)이 있습니다.
표준 스펙 : 자바 컴파일러, 실행 라이브러리, JVM의 규칙과 인터페이스 정의
구현 : 표준 스펙을 따라 만들어진 실제 JDK 및 JVM 구현체 (Oracle JDK, OpenJDK, HotSpot, GraalVM 등)
“표준 스펙”은 레시피(요리법) 같은 것이고, “구현”은 그 레시피를 사용해 만든 실제 요리(Oracle JDK, OpenJDK 등) 라고 볼 수 있습니다.