Javaテクノロジーの特徴の説明

最終更新日: 2019年8月25日 14時30分

目次

講義の目的

Javaテクノロジーの特徴が理解できる

目的に応じたJavaテクノロジーを選択できる

1. Javaテクノロジーの特徴

Javaは膨大なテクノロジーが公開されています。

JavaテクノロジのコアであるJREとJDK以外にも多くのテクノロジーが存在します。

普段のプログラミングでJavaテクノロジーを意識することはありません。しかし、設計やパフォーマンスを考慮した実装をする際に、Javaテクノロジーの知識は重要になります。

この講義では、最低限抑えて欲しいJavaテクノロジーを簡潔にまとめました。

2. JVM

JVM (Java Virtual Machine) は、Javaバイトコードを実行する仮想マシンです。Javaバイトコードはjavacコマンドでコンパイルした後に出力される .class ファイルのことです。

JVMは、コンパイルしたクラスをロードして実行します。JVMはクラスをロードするために、クラス・ローダー・オブジェクトを使用します。

すでにロードされたすべてのクラスは自身のクラス・ローダーへの参照を持っており、JVMはそのクラス・ローダーを使用して、このクラスから参照されるすべてのクラスをロードします。

クラス・ローダーは、java.lang.Classloader型のオブジェクトであり、開発者はこのオブジェクトを使用して、クラス名によってクラスを検索してロードします。

同一の複数のクラスにJVMがアクセスできる場合、最初に見つかった該当クラスを優先します。

3. JITコンパイラ

JITコンパイラは、アプリケーション実行時に、コードのコンパイルを行い実行速度の向上を図るコンパイラのことです。

JITとはJust-In-Timeの略です。

JIT方式は、AOTコンパイル方式と比べ、コンパイル時間の分がプログラム実行時間に関するオーバーヘッド(余分に費やされる処理時間)になります。

AOTコンパイルと比べてこのような不利な点がありながらも、JITコンパイル方式が利用されているのは、実行時にコンパイルを行うことでOSやCPUに依存しないソースコードや中間コードの状態でソフトウェアを配布することができるからです。

4. AOTコンパイラ

AOTコンパイラは、アプリケーション実行時に事前にコンパイルするコンパイラのこと。

AOTとはAhead-Of-Timeの略です。

AOT方式は、JITコンパイル方式と比べ、プログラム実行前にJavaバイトコードをネイティブコードに変換することで、プログラム実行時間に関するオーバーヘッド(余分に費やされる処理時間)を減らすことができます。

Javaでは、Java 9以降のLinux版のみで対応しています。

5. Graal

Graalは2018年にoracleから発表されたJITコンパイラです。

既存のJITコンパイラに利用されているC2コンパイラの維持拡張がとても難しくなっていることから、新しいコンパイラとしてゼロから書かれれています。

6. GraalVM

GraalVMは、JavaScript、Python、Ruby、R、Java、Scala、Kotlin、ClojureなどのJVMベースの言語、およびCやC ++などのLLVMベースの言語で作成されたアプリケーションを実行するための仮想マシン(Vaitual machine)です。

GraalVMはJITコンパイラに既存のJITコンパイラに利用されているC2コンパイラでなく、Graalを使っています。

また、GraalVMには、既存のJVMベースのアプリケーション用のネイティブイメージを作成する機能があります。ネイティブイメージには、即時実行のためのプログラム全体がマシンコード形式で含まれます。

既存のVMだと起動コストがかかり、サーバーレスのような用途には向きませんでしたが、ネイティブイメージを使うことで起動コストがなくなり、サーバーレスでも高速に処理を実行できます。

まとめ

この講義では、Javaテクノロジーについて学習しました。

ここで説明されているのは、初学者にも抑えていて欲しいJavaテクノロジーです。

プログラミングのレベルが上がると、もっと深い知識が必要になってきます。なので、この講義で説明されているテクノロジーを完全に理解して、さらなるプログラミングのスキルの向上に努めてください。

演習

この講義に関連する演習問題を用意しました。理解度を確認してください。

演習