Javaのコンパイラ方式をざっくりまとめてみた
はじめに
初めて投稿します。
プログラミング初心者Wakinozaと申します。
Java勉強中に調べたことを記事にまとめています。
十分気をつけて執筆していますが、なにぶん勉強始めたての初心者が書いた記事なので、理解が浅い点などあるかと思います。
記事を参考にされる方は、初心者の記事であることを念頭において、お読みいただけると幸いです。
間違い等指摘いただけると、当方飛び上がって喜びます。
よろしくお願いいたします。
対象読者
Java初心者の方。
Java SE Bronze試験を勉強中の方。
その他、Javaのコンパイラ方式について、ざっくり理解したい方など。
目次
1. コンパイラとは
2. 事前コンパイラ方式とインタープリタ方式
3. インタープリタ方式
4. Javaのコンパイルの流れ
本文
1. コンパイラとは
何らかのプログラミング言語で書かれたコードを「ソースコード」と呼びます。
ソースコードは、会話用の言語に近い文法を使っているため、人間にも読み書きしやすいのが利点ですが、コンピュータには理解できません。
コンピュータに理解してもらうには、ソースコードを機械語(ネイティブコード)に翻訳する必要があります。
このソースコードから機械語への翻訳作業を「コンパイル」、翻訳作業を行うプログラムを「コンパイラ」と呼びます。
機械語も一種類ではありません。
プログラムを動作させる環境のOSやCPUによって、コンピュータが理解できる機械語は異なります。
そのため、Windows用にコンパイルした機械語とMac用にコンパイルした機械語は、同じソースコードからコンパイルした機械語であっても互換性はありません。
コンパイルには、2つの種類があります。
事前コンパイラ方式とインタープリタ方式です。
2. 事前コンパイラ方式
ソースコードをあらかじめコンパイルしてからプログラムを実行する方式のことです。
CやC++などで採用されています。
長所は、あらかじめ機械語に翻訳されているため高速にプログラムを実行できること。
短所は、機械語の互換性がないため、対象のOS以外ではプログラムを実行できないこと。
3. インタープリタ方式
「インタープリタ」と呼ばれる専用のアプリケーションを使い、プログラム実行時に、ソースコードをコンパイルする方式です。
PHPやJavaScriptなどで採用されています。
長所は、事前にコンパイルしておく必要がないため、OSごとのインタープリタを用意すれば、様々なOSでプログラムを実行できること。
短所は、ソースコードを1行ずつコンパイルするため、事前コンパイラ式を比べて実行速度が遅くなってしまうこと。
4. Javaのコンパイルの流れ
Javaは、この2つの良いとこどりの方式を採用しました。
それが、実行時コンパイラ方式です。
実行時コンパイラ方式は、機械語への翻訳作業を2回に分けていることが特徴です。
1回目がソースコードから中間コードへの翻訳、2回目が中間コードから機械語への翻訳です。
1回目の翻訳では、Javaコンパイラが、ソースコードを中間コードに翻訳します。
中間コードは、ソースファイル(sample.java)をコンパイルして生成されるクラスファイル(sample.class)のことで、以下の2点の利点があります。
- 翻訳効率が良い2進数のバイトコードで記述されていること
- まだOS固有のコードに変換されていないため、様々なOSで利用することができること
2回目の翻訳では、Java仮想マシン(JVM :Java Virtual Machine)プログラムが、中間コードを実行時に機械語に翻訳します。
すでに翻訳効率の良い中間コードに変換されているため、他のインタープリタ方式言語よりもプログラムの実行速度が優れていることが特徴です。
Javaは、翻訳作業を2回に分けることによって、様々なOSで利用できるというインタープリタ方式の利点を持ちながら、実行速度を高めることに成功したのです。
最後までお読みいただき、ありがとうございます。
参考文献
- [徹底攻略 Java SE Bronze 問題集]
- [スッキリわかるJava入門 第4版]
- [改訂3版 これから始めるプログラミング基礎の基礎]
- [プログラムはなぜ動くのか 第3版]
Discussion