JDK 7におけるモジュールの分割と依存関係
JDK 7におけるモジュールの分割と依存関係
[画像のクリックで拡大表示]
モジュールの記述方法。モジュール名とバージョンを指定する
モジュールの記述方法。モジュール名とバージョンを指定する
[画像のクリックで拡大表示]

 「2009 JavaOne Conference(JavaOne 2009)」の開催に合わせ,米Sun Microsystems,Inc.は次世代のJavaである「JDK 7」のプレリリース版を公開した。3番目のマイルストーン版で,「JavaOne Preview」と呼んでいる。今後ほぼ2カ月に1度程度の頻度で版を重ね,2010年2月に製品候補版を公開する計画となっている。

 Principal Engineer,Java SE&Open JDKのMark Reinhold氏がJDK 7の大きな特徴として挙げたのは,(1)モジュール化対応,(2)ほかのプログラミング言語への対応,(3)生産性向上,の3点である。「Javaは世代を重ねることに機能を増やし,肥大化してきた。現行のOpenJDK 6の場合,全体のダウンロード量はランタイムだけで13Mバイトにも上る。開発キットを入れると70Mバイトを超える。これでは,モバイル機器などの小さなコンピュータでは動かない」(Reinhold氏)。

 しかし一方で,機能の拡張は求められる。そこで始まったのが「Project Jigsaw」と呼ぶモジュール化であるという。ただ単に実行環境をモジュール化するだけでなく,アプリケーション・ソフトウエアの方もモジュール化を可能にする。「モジュールの依存関係に基づいて,必要なモジュールを組み合わせてパッケージにまとめることができる」(Reinhold氏)点が特徴である。

 モジュールは「jar形式」と呼ぶアーカイブ・ファイルを単位とする。モジュールが必要とするjarファイルのライブラリやバージョンなどの情報を「module-info.java」ファイルに記述する。この情報を見て依存関係を解消するので,これまでJavaプログラムの実行でよく問題になった「CLASSPATH」の記述が不要になる。

 (2)の他言語への対応は,ここにきてJava仮想マシンを動作環境とする動的言語が増えていることがその背景にある。「RubyやPythonといったスクリプト言語の実装としては,Java仮想マシンで動くJRubyやJythonが最も安定して性能も高い」(Reinhold氏)。そこで,動的言語であってもJava言語の実行時と同程度に高い性能で実行可能なJava仮想マシンを実装するためのプロジェクト「the Da Vinci Machine Project」を進めている。特に「dynamic invocation」と呼ぶ,実行時に型情報が変わっても効率よく呼び出すための仕組みの実装に力を入れているという。

 (3)の生産性への寄与として,コンパイル時に型情報を推測する仕組みを「Project Coin」で進めている。Javaの場合,新しい型の変数を生成するときなどに型名が繰り返し登場し,冗長になるときがある。単純な場合はまだしも,複雑な初期化をする際にはこれが無駄なエラーを生み出すことがある。そこでコンパイラが型を推測できる範囲であれば,指定を省略してもコンパイルを可能にすると言うものである。

 このほかにも同時並行制御や入出力APIの改善,ガーベジ・コレクションの改訂などがJDK 7には盛り込まれているという。