Java VMがJavaのものではなくなる日2006 JavaOne Conference

今年のJavaOneは、次期Java SE 7でスクリプト言語サポートが発表されたためさまざまなセミナーやブースで話題となっている。Java VMへの変更はJavaにどのような効果をもたらしていくだろうか。

» 2006年05月19日 20時26分 公開
[櫻庭祐一,ITmedia]

 米国サンフランシスコで19日まで開催の「2006 JavaOne Conference」。今回のカンファレンスでは、Javaの開発者会議であるにもかかわらず、話題の中心は“スクリプト言語”だといえる。

 Java SE 6ではスクリプト言語のためのAPIが整備されるなど、スクリプト言語に関する話題は尽きない。さらにJava SE 7ではスクリプト言語をサポートするために、Java VMが変更される予定だ。

 今年のJavaOneではスクリプト言語の利用をさまざまなところで見ることができた。Java SE 6ではJSR-223で策定されたスクリプトのためのAPIが整備され、標準でJavaScriptが使えるようになる。また、開催初日に行われた基調講演では、今後のJava EEのロードマップとしてスクリプト言語のサポートが挙げられた。

Jythonスクリプトでコントロールされる鉄道模型

 パビリオンでも、意外なところでスクリプト言語を利用した事例を見ることができた。鉄道模型のコントロールを行うJava Model Railroadingでは、Jythonのスクリプトが使用されている。

 このように、スクリプト言語が盛りだくさんのJavaOneで、Java SE 7 Dolphinにおけるスクリプト言語のサポートに関するテクニカルセッションが行われた。

Java VMの変更

 Java SE 7では、スクリプト言語をサポートするための方策として、次の2点が提案されている。

  • バイトコードの追加
  • ホットスワップ

 バイトコードはJava VMに対する命令系統のことで、追加されるのはメソッド実行に関するバイトコードである。

 Javaは、比較的強い型付け言語であるため、メソッドの引数の型や戻り値の型が決まっている必要がある。しかし、多くのスクリプト言語は、引数や戻り値の型が実行時に決まる。このようなメソッドの実行に対応できるように、invokedirectというバイトコードが追加された。

 しかし、invokedirectを使用しても、問題が残る。その1つに、Javaでは許されていない多重継承やミックスインを扱うことができないという問題がある。このような問題があるにしても、invokedirectを使うことで多くの場合、弱い型付けのメソッドに対応することが可能となるのだ。

 さらに、クラスの定義の動的な変更を可能とするホットスワップがサポートされる。ホットスワップは元々LispやSmalltalkで使用されていた技術であり、Java SE 5.0においても限定的に使用することができた。

 しかし、Java SE 5.0のホットスワップはスクリプト言語のためではなく、プロファイルやデバッグのために使用され、メソッドの内部実装の変更だけが許されていた。Java SE 7ではホットスワップの機能拡張を行い、次に示すような機能がサポートされる。

  • メソッドの引数の個数や型の変更
  • メソッドの追加・削除
  • フィールドの追加・削除
  • 継承関係の変更

 これらのJava VMに対する変更はまだ原案段階であり、今後JSR-292において仕様検討が行われる予定である。

 これらのJava VMに対する変更によって、Java VMはさまざまなスクリプト言語への対応が容易になる。現在でも、JRubyJytonGroovyなど、Java上で動作するスクリプト言語は数多い。今後、Java SE 7の登場により、Java VMがJavaのためのVMではなくなる日があり得るかもしれない。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ