サンプルコードで身につける: Java・JDK・JRE・JVM: 何を入れて、何が動くのか
解説で学んだ概念を、5つの具体例で確認します。素朴な例から実務寄りの例へと進みます。
1用語早見表: Java・JDK・JRE・JVM とその周り
このレッスンの用語を1つずつ、一言の説明、手元での見え方、Node で近いものの順に並べた表です。Node との対応は役割のたとえで、公式の文書が対応を述べているわけではありません。 に近いのは で、Node.js 本体に近いのは です。当たらない点は5本目にまとめました。
用語 | 一言で手元では: 何として見えるか近いもの: 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)近いもの: V8HotSpot | OpenJDK に入っている JVM の実装の名前手元では: java -version の3行目の Server VM近いもの: V8OpenJDK | Java の実装を作る公開のプロジェクトとそのソース手元では: java -version の1行目の openjdk近いもの: 無いOracle JDK | Oracle が商用ライセンスで配る JDKOracle は同じソースから無料の 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 は付きません。
openjdk version "25.0.4.1" 2026-08-18 LTSOpenJDK 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 では が見つからないので、ソースから を作れません。
bin/ に入っているコマンドの数JDK : 30(java javac jar javap jshell jlink など)JRE : 6(java jfr jrunscript jwebserver keytool rmiregistry)javac -versionJDK : javac 25.0.4.1JRE : javac: not foundJVM の本体 lib/server/libjvm.so(Linux でのファイル名)JDK : 27,630,008 BJRE : 27,630,008 B標準ライブラリの入れ物 lib/modulesJDK : 146,097,979 BJRE : 99,447,379 Bインストール先の全体(du -sk)JDK : 258,324 KBJRE : 194,344 KB
4release ファイルに書いてあること
JDK のインストール先には release というテキストファイルがあり、誰がビルドした、どの版の、どの JVM かが書いてあります。配布元(IMPLEMENTOR)、実装の版(JAVA_VERSION)、JVM の種類(JVM_VARIANT)、JDK か JRE か(IMAGE_TYPE)が別々の値です。JRE のでは最後の行が IMAGE_TYPE="JRE" でした。
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 は名前が似ているだけの別の言語です。
JVM | V8JVM は .class を読む。Node はソースを読むJRE | Node.js 本体Node に、実行だけの配布物という区別は無いOracle は JDK 11 から JRE を単独では配っていないJDK | Node.js 本体と開発用の道具javac は JDK に入っている。tsc は npm で後から入れるnpm に当たる依存取得の道具は JDK に入っていないJDK の配布元 | nodejs.orgJDK は同じソースから複数の配布元がビルドして配るJava | JavaScript ではないOracle の java.com のヘルプは、JavaScript はJava プラットフォームの一部ではない、と書いている