Devoxx Belgium でのMark Reinholdの基調講演に基づいて、Project Jigsawは 2 つの主要な問題点に対処します。
- クラスパス
- 大規模なモノリシック JDK
クラスパスの何が問題になっていますか?
私たちは皆、 JAR 地獄について知っています。この用語は、クラスローディングプロセスが機能しなくなるさまざまな状況をすべて表しています。クラスパスの最もよく知られている制限は次のとおりです。
- 競合があるかどうかを判断するのは困難です。Maven のようなビルド ツールは、アーティファクト名に基づいてかなりうまく機能しますが、アーティファクト自体が異なる名前で同じ内容を持っている場合、競合が発生する可能性があります。
- jar ファイルの根本的な問題は、それらがコンポーネントではないことです。それらは、直線的に検索されるファイル コンテナーの集まりにすぎません。クラスパスは、クラスが含まれているコンポーネント、含まれているパッケージ、または使用目的に関係なく、クラスを検索する方法です。
大規模なモノリシック JDK
JDK の大きなモノリシックな性質は、いくつかの問題を引き起こします。
- 小型のデバイスには適合しません。小さなIoTタイプのデバイスにはSEクラスのVMを実行できるプロセッサがありますが、特にアプリケーションがJDKのごく一部しか使用しない場合、すべてのJDKを保持するためのメモリが必ずしもありません.
- クラウドでも問題です。クラウドは、ハードウェアの使用を最適化することがすべてです。JDK 全体を含む何千ものイメージがあり、アプリケーションがその一部しか使用しない場合、それは無駄になります。
モジュール: 一般的なソリューション
上記の問題に対処するために、モジュールを基本的な新しい種類の Java プログラム コンポーネントとして扱います。モジュールは、コードとデータの名前付き自己記述型コレクションです。そのコードは、タイプ、つまり Java クラスとインターフェースを含むパッケージのセットとして編成されています。そのデータには、リソースやその他の種類の静的情報が含まれます。
そのコードが他のモジュールの型を参照する方法を制御するために、モジュールは、コンパイルして実行するために必要な他のモジュールを宣言します。他のモジュールのコードがそのパッケージの型を参照する方法を制御するために、モジュールはエクスポートするパッケージを宣言します。
モジュール システムは、必要なモジュールを検索し、クラスパス メカニズムとは異なり、モジュール内のコードが依存するモジュール内の型のみを参照できるようにします。Java 言語と Java 仮想マシンのアクセス制御メカニズムにより、定義モジュールによってエクスポートされていないパッケージ内の型にコードがアクセスできなくなります。
信頼性が高くなるだけでなく、モジュール性によってパフォーマンスが向上する可能性があります。モジュール内のコードがパッケージ内の型を参照する場合、そのパッケージは、そのモジュールまたはそのモジュールによって読み取られるモジュールの正確に 1 つのいずれかで定義されることが保証されます。したがって、特定のタイプの定義を検索するときに、複数のモジュールで検索する必要はなく、さらに悪いことに、クラス パス全体に沿って検索する必要もありません。
フォローするJEP
ジグソーは、かなりの数年間進行中の巨大なプロジェクトです。プロジェクトに関するより多くの情報を得るのに最適な場所である JEP が非常に多くあります。これらの JEP の一部は次のとおりです。
閉会の辞
The State of the Module Systemレポートの初版で、Mark Reinhold はモジュール システムの具体的な目標を次のように説明しています。
- Reliable configuration。脆弱でエラーが発生しやすいクラスパス メカニズムを、プログラム コンポーネントが相互に明示的な依存関係を宣言する手段に置き換えます。
- 強力なカプセル化。コンポーネントが、他のコンポーネントからアクセスできるパブリック タイプとアクセスできないパブリック タイプを宣言できるようにします。
これらの機能は、アプリケーション開発者、ライブラリ開発者、および Java SE プラットフォーム自体の実装者に直接的および間接的に利益をもたらします。これは、スケーラブルなプラットフォーム、プラットフォームの完全性の向上、およびパフォーマンスの向上が可能になるためです。