01 / WRITE CODE
まずはJavaを書く
まずは普通にJavaのコードを書きます。
public class Hello {
public static void main(String[] args) {
System.out.println("Hello Java");
}
}
これを
Hello.java
というファイルに保存します。
ここまでは、 Javaを勉強したことがある人なら 見慣れた光景だと思います。
.java
は、
Javaのソースコードを書いたファイルです。
02 / WHAT HAPPENS NEXT?
書いたコードは、そのまま動くの?
ここで少し疑問が出てきます。
Hello.javaを書いた。
じゃあ、 パソコンはこのコードを そのまま実行しているの?
実は、そのままではありません。
Javaでは、 まず書いたコードを 「実行しやすい形」に変換します。
この変換を コンパイル といいます。
03 / COMPILE
Javaのコードを変換する
Javaでは、 書いたコードをコンパイルします。
コンパイルには、
javac
というコマンドを使います。
javac Hello.java
すると、
Hello.class
というファイルが作られます。
Hello.java
↓
コンパイル
↓
Hello.class
この
.class
ファイルには、
Javaを実行するための
「バイトコード」が入っています。
Javaでは、
.java
をそのまま実行するのではなく、
いったん
.class
に変換します。
04 / BYTECODE
.classには何が入っているの?
Hello.class
の中には、
Javaの
バイトコード
が入っています。
ここで大事なのは、 Javaのソースコードを いきなりパソコンのCPUが 実行しているわけではない、 ということです。
Javaソースコード
↓
コンパイル
↓
Javaバイトコード
↓
実行
この間にある 「バイトコード」が、 Javaを理解するうえで 重要なポイントになります。
Javaでは、 ソースコードと実行の間に バイトコードという 中間的な形があります。
05 / JVM
ここでJVMが登場する
では、
Hello.class
は誰が実行するのでしょうか。
そこで登場するのが JVM です。
JVMは Java Virtual Machine の略です。
名前は少し難しく見えますが、 最初は 「Javaのバイトコードを読み込んで 実行する仕組み」 くらいに考えて大丈夫です。
Hello.java
↓
コンパイル
↓
Hello.class
↓
JVM
↓
「Hello Java」と表示
つまり、 自分が書いたJavaコードが そのままJVMに渡されるわけではなく、 コンパイルされた バイトコードをJVMが読み込んでいます。
06 / JDK
じゃあJDKって何?
Javaを開発していると、
javac
などのコマンドを使います。
こうしたJava開発に必要な ツールをまとめたものが JDK です。
JDKは Java Development Kit の略です。
JDK = Javaを作るためのもの
今回使った
javac
も、
JDKに含まれる
Java開発用のツールです。
07 / JRE
JREという言葉も出てくる
Javaを実行するための環境として、 JRE という言葉もあります。
JREは Java Runtime Environment の略です。
最初から、 この3つを完璧に覚える必要はありません。
まずは、 こんなイメージで十分です。
Javaを作る → JDK
Javaを動かす環境 → JRE
バイトコードを実行する → JVM
Java 9以降では、 従来のような独立したJREを 配布する形は基本的ではありません。 ここではJDK・JRE・JVMの 役割を理解するための 基本的なイメージとして整理しています。
08 / COMPLETE FLOW
Javaが動くまでを一気につなげる
ここまでの話を 一つにつなげてみます。
Javaを書く
↓
コンパイルする
↓
.classになる
↓
バイトコードになる
↓
JVMが読み込む
↓
Javaが動く
これが、 Javaのコードを書いてから 実際にプログラムが動くまでの 大まかな流れです。
Javaを書く → コンパイルする → バイトコードになる → JVMが実行する。
09 / WHY IT MATTERS
この流れを知ると何がうれしい?
普段Javaを書いていると、 この途中の仕組みを 毎回意識することはありません。
IDEで 「実行」 を押せば、 Javaのプログラムが動きます。
なので、 最初は 「裏側で何が起きているんだろう?」 くらいで十分です。
ただ、 エラーやメモリ、 パフォーマンスなどを 調べるようになると、 この知識が少しずつ効いてきます。
例えば、
このクラスはいつ読み込まれる?
このコードはどこで実行されている?
なぜメモリを使い続ける?
こうした疑問を考えるときに、 「Javaのコードを書いたら そのまま動いているわけではない」 ということを知っているだけでも、 見方が変わってきます。
FIELD NOTE
「Javaを書いたら動く」の裏側
コードを書く。
コンパイルする。
バイトコードになる。
JVMが読み込む。
そして、実行される。
普段Javaを使っていると、 この途中の部分を 意識することは あまりありません。
でも、 「自分が書いたコードが どうやって動いているのか」 を知っておくと、 Javaのエラーや仕組みを 調べるときに、 少し違った角度から 考えられるようになります。
まずは、 JDK・JRE・JVMを 完璧に覚える必要はありません。
Javaを書く。 コンパイルする。 JVMが実行する。
まずこの流れが頭に入れば、 Javaが動く仕組みを理解する 最初の一歩としては十分です。