Javaの特徴とJVMを理解する
Javaを、言語・コンパイラ・仮想マシン・標準APIの組合せとして理解します。ソースから実行までの役割を分け、移植性の条件とJava SE・EE・MEの位置付けを学びます。
この単元で学ぶこと
- 言語とJVMと開発ツールの役割を区別する
- クラスファイルの移植性と実行条件を判断する
- Javaの各エディションの主な対象を区別する
本文解説
言語と実行基盤 Javaという言葉には、classやifで処理を書く言語と、その処理を動かす基盤という側面があります。int n=2;という構文は言語の規則で、Stringなどの使える機能はAPI、命令を実行する仕組みはJVMです。役割を分けると道具の名前を暗記するだけでなくエラーの段階も理解できます。
コンパイラとランチャー public class Main{public static void main(String[] args){System.out.print(2+3);}}をMain.javaへ保存します。javac Main.javaはクラスファイルを作り、この時点では5を表示しません。java Mainを実行したときにmain内の計算が動いて5を表示します。
クラスファイルとJVM Main.classは通常のソーステキストではなく、JVMが扱うバイナリ形式です。CPU固有の実行ファイルそのものと同一ではありません。JVMの実装が実際のOSやCPUへ対応することで、共通形式のコードを異なる環境で動かす基盤になります。
移植性の条件 同じクラスファイルでも、それを扱えるJavaの版、必要なライブラリ、ファイルやネットワーク等の外部条件が必要です。プログラムが特定のWindowsパスを埋め込めば、Linux側でそのパスがあるとは限りません。言語上の移植性は外部資源の存在まで保証しません。
JDKと実行環境 JDKはjavac等の開発ツールを含みます。JVMは実行の中心となる構成要素です。実行環境という概念にはJVMに加えて必要なクラスライブラリ等が関わります。JREという実行環境の呼称と、各ベンダーがどの版で単独配布しているかという製品形態は分けます。
インタプリタとJIT JVMは必ずソースを一行ずつ解釈する仕組み、という説明は不正確です。クラスファイルの命令を扱い、実装には実行時コンパイルなどの最適化もあります。最適化しても、ここで学ぶ整数加算などの言語上の意味を勝手に変更することはできません。
SE・EE・ME Java SEは基本となる言語機能や一般的なAPIの基盤です。Java EEはSEを基礎として企業向けのサーバー処理等のAPIと実行基盤を加える位置付けです。Java MEは制約のある小型機器向けの構成を持ちます。名称は処理速度の高・中・低や試験の難易度を表すものではありません。
版とエディション Java SE 11のSEはエディション、11は版です。エディションを替えることと、新しい言語機能を使える版へ替えることは別です。BronzeではまずSEの基本規則を扱い、EEやMEの個別サーバー設定を覚える必要はありません。企業向け技術の発展にJakarta EEという名称もありますが、この教材のSE/EE/MEの比較は公式出題項目の分類に対応します。
図解
重要ポイント
- javacがソースをクラスファイルへ変換し、javaが実行環境を起動する。
- JVM実装は環境に対応し、クラスファイルは共通の形式を持つ。
- 互換バージョン・必要ライブラリ・外部環境が実行条件になる。
- SEは基礎、EEは企業向けの拡張、MEは小型機器向けの構成。
間違えやすい点
- どのOSでも無条件に動くと断定しない。
- JVMを必ず逐次インタプリタだけと考えない。
- SE/EE/MEを難易度や速度の順位と考えない。
用語解説
- JVM
- クラスファイルに記された命令等を扱う仮想マシン。
- JDK
- コンパイラ等の開発用ツールを含む開発キット。
- API
- プログラムから利用できるクラスやメソッド等の取り決め。
- バイトコード
- JVMが扱う命令形式。クラスファイルに収録される。
関連教材
参考資料
教材データに登録された参考リンクです。リンク先の内容や更新日は提供元でご確認ください。
- https://www.oracle.com/jp/education/certification/certification-exam-list/java-se-bronze-1z0-818-exam/
- https://docs.oracle.com/javase/specs/jvms/se11/html/jvms-1.html
- https://docs.oracle.com/javase/specs/jls/se11/html/jls-12.html
- https://docs.oracle.com/javaee/6/firstcup/doc/gkhoy.html
- https://www.oracle.com/java/technologies/java-ee-glance.html
- https://www.oracle.com/java/technologies/javameoverview.html
- https://docs.oracle.com/en/java/javase/11/tools/javac.html
- https://docs.oracle.com/en/java/javase/11/tools/java.html
確認問題の出題・採点や学習履歴の保存にはログインが必要です。