Dev Study
← 解説「Java・JDK・JRE・JVM: 何を入れて、何が動くのか」に戻る

サンプルコードで身につける: Java・JDK・JRE・JVM: 何を入れて、何が動くのか

解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。

1用語早見表: Java・JDK・JRE・JVM とその周り

このレッスンの用語を1つずつ、一言の説明、手元での見え方、Node で近いものの順に並べた表です。Node との対応は役割のたとえで、公式の文書が対応を述べているわけではありません。 に近いのは で、Node.js 本体に近いのは です。当たらない点は5本目にまとめました。

用語早見表(Java・JDK・JRE・JVM とその周り)表
用語 | 一言で
手元では: 何として見えるか
近いもの: Node / NestJS で近いもの
 
Java | 言語の名前。規格や配布物を指しても使われる
手元では: .java のソース、java コマンド
近いもの: 言語としての JavaScript(Java とは別の言語)
 
Java SE | 言語・JVM・標準ライブラリをまとめた規格
Java Platform, Standard Edition の略
手元では: java.specification.version = 25
近いもの: ECMAScript の仕様
 
JDK(Java Development Kit)| 開発用の一式。入れるのはこれ
手元では: bin/ に java・javac・jar など
近いもの: Node.js 本体と開発用の道具
 
JRE(Java Runtime Environment)| 動かすだけの一式
手元では: bin/ に java はあるが javac は無い
近いもの: Node.js 本体
 
JVM(Java Virtual Machine)| .class を実行する仮想の計算機
手元では: java コマンドで起動する
(Linux の Temurin では lib/server/libjvm.so)
近いもの: V8
 
HotSpot | OpenJDK に入っている JVM の実装の名前
手元では: java -version の3行目の Server VM
近いもの: V8
 
OpenJDK | Java の実装を作る公開のプロジェクトとそのソース
手元では: java -version の1行目の openjdk
近いもの: 無い
 
Oracle JDK | Oracle が商用ライセンスで配る JDK
Oracle は同じソースから無料の OpenJDK ビルドも配る
手元では: このコースでは使っていない
近いもの: 無い
 
Temurin | Eclipse Adoptium が配っている JDK の名前
手元では: java.vendor = Eclipse Adoptium
近いもの: 無い
 
LTS(Long-Term Support)| 配布元が長く支援する版という約束
手元では: java -version の1行目の末尾の LTS
近いもの: 対応を確かめていない

2java -version の3行を読む

は、入っている Java の版を3行で表示します。1行目が の版と日付、2行目が実行環境の名前と配布元の版名、3行目が JVM の名前です。 の印は配布元が付けるもので、同じ でも JDK 22 の1行目は openjdk version "22.0.2" 2024-07-16 で、LTS は付きません。

$ java -version(eclipse-temurin:25-jdk。# の行は読み方の補足)コマンド出力
openjdk version "25.0.4.1" 2026-08-18 LTS
OpenJDK Runtime Environment Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS)
OpenJDK 64-Bit Server VM Temurin-25.0.4.1+1 (build 25.0.4.1+1-LTS, mixed mode, sharing)
 
# 1行目
# 25.0.4.1 この JDK(実装)の版
# 2026-08-18 この版が一般に提供された日
# LTS 配布元が長期の支援を付けている印
# 2行目
# OpenJDK Runtime Environment 実行環境の名前
# Temurin-25.0.4.1+1 配布元が付けた版の名前
# 3行目
# OpenJDK 64-Bit Server VM JVM の名前(HotSpot)
# mixed mode, sharing JVM の動き方の表示(後のレッスンで扱います)

3JDK と JRE を並べて中を見る

同じ版(Temurin 25.0.4.1)の JDK と JRE の中身を比べた表です。違いは道具(bin のコマンド)と、道具のためのライブラリです。JVM の本体である は、どちらも同じ大きさでした。JRE では が見つからないので、ソースから を作れません。

eclipse-temurin:25-jdk と eclipse-temurin:25-jre の比較(arm64 の Docker 上の Linux、各1回)表
bin/ に入っているコマンドの数
JDK : 30(java javac jar javap jshell jlink など)
JRE : 6(java jfr jrunscript jwebserver keytool rmiregistry)
 
javac -version
JDK : javac 25.0.4.1
JRE : javac: not found
 
JVM の本体 lib/server/libjvm.so(Linux でのファイル名)
JDK : 27,630,008 B
JRE : 27,630,008 B
 
標準ライブラリの入れ物 lib/modules
JDK : 146,097,979 B
JRE : 99,447,379 B
 
インストール先の全体(du -sk)
JDK : 258,324 KB
JRE : 194,344 KB

4release ファイルに書いてあること

JDK のインストール先には release というテキストファイルがあり、誰がビルドした、どの版の、どの JVM かが書いてあります。配布元(IMPLEMENTOR)、実装の版(JAVA_VERSION)、JVM の種類(JVM_VARIANT)、JDK か JRE か(IMAGE_TYPE)が別々の値です。JRE のでは最後の行が IMAGE_TYPE="JRE" でした。

$JAVA_HOME/release(eclipse-temurin:25-jdk。... は省略した行)設定ファイル
IMPLEMENTOR="Eclipse Adoptium"
IMPLEMENTOR_VERSION="Temurin-25.0.4.1+1"
JAVA_RUNTIME_VERSION="25.0.4.1+1-LTS"
JAVA_VERSION="25.0.4.1"
JAVA_VERSION_DATE="2026-08-18"
...
SOURCE_REPO="https://github.com/adoptium/jdk25u.git"
...
JVM_VARIANT="Hotspot"
JVM_VERSION="25.0.4.1+1-LTS"
IMAGE_TYPE="JDK"

5混同しやすいもの: JVM は Node.js ではなく V8

JVM を Node.js に当てると、対応が一段ずれます。Node.js は V8 というエンジンをブラウザの外で動かす実行環境で、Java 側でそれに近いのは JVM とと コマンドを合わせた JRE です。もう1つ、Java と JavaScript は名前が似ているだけの別の言語です。

Java 側の用語 | Node で近いもの(字下げの行は、たとえが当たらない点)表
JVM | V8
JVM は .class を読む。Node はソースを読む
 
JRE | Node.js 本体
Node に、実行だけの配布物という区別は無い
Oracle は JDK 11 から JRE を単独では配っていない
 
JDK | Node.js 本体と開発用の道具
javac は JDK に入っている。tsc は npm で後から入れる
npm に当たる依存取得の道具は JDK に入っていない
 
JDK の配布元 | nodejs.org
JDK は同じソースから複数の配布元がビルドして配る
 
Java | JavaScript ではない
Oracle の java.com のヘルプは、JavaScript は
Java プラットフォームの一部ではない、と書いている

図やコードに出てくる用語(タップで説明)