トップQs
タイムライン
チャット
視点
Da Vinci Machine
ウィキペディアから
Remove ads
Da Vinci MachineあるいはMulti Language Virtual Machineとは、 サン・マイクロシステムズによるプロジェクトで、Java仮想マシン(JVM)に動的言語のサポートを 追加する拡張のプロトタイプを開発するものであった。
当時、JVM上では動的言語を実行できていたが、このプロジェクトのゴールは、 動的言語の実装を容易にし、パフォーマンスを良くすることであった。 このプロジェクトはJSR 292 (Supporting Dynamically Typed Languages on the Java Platform)のリファレンス実装であった。[1]
Remove ads
歴史

Java 7以前には、Java仮想マシンには動的型付け言語のサポートが組み込まれていなかった。
JSR 292 (Supporting Dynamically Typed Languages on the Java Platform)[1]は、以下を提案した。
- 新しくinvoledynamic命令をJVMレベルで追加する。これにより、動的な型チェックによりメソッドを呼び出せるようになる。[3][4][5]
- プロダクション環境で実行時に、クラスとメソッドを動的に変更できるようにする。
JRubyのJava実装の成功により、2008年1月の終わりにDa Vinciプロジェクトが開始された。[6] Da Vinciにより実験された機能は、Java 7に追加することが予定された。 このJSRのプロトタイプを作るだけでなく、他の低優先度の拡張のプロトタイプを作ることも目的だった。[7] 最初の動くプロトタイプは、OpenJDKへのパッチとして開発され、2008年8月にアナウンスされ利用可能になった。[8][9][10]
その後、JRubyチームは、JRubyのコードベースに動的呼び出しを組み込むのに成功した。
1.1.5のリリースに含まれており、invokedynamic
機能がないJVMでは無効化されていた。[11]
Remove ads
アーキテクチャー
動的呼び出しは、Javaが言語レベルで強く静的に型付けされた言語であっても、型の情報はバイトコードレベルでは広く利用されていないという事実に基づいている。
しかし、動的言語の実装は、 パフォーマンスを良くし、実行時にスクリプトをバイトコードにコンパイルするために、 (リフレクションではなく) just-in-timeコンパイルを利用できる必要がある。 [要出典] Java仮想マシンで実行できるためには、これらのバイトコードは実行の前に検証されなくてはならない。検証機構は、コードを通じて型が静的であることをチェックする。 これによりメソッド呼び出しの引数のシグネチャーの変更のたびに、異なるバイトコードを生成しなくてはならない。 これは、メモリーを多く利用するだけでなく、JVMがクラスに関する情報を保存するのに使うヒープ領域であるMetaspace (Java 8以前ではPermanent Generation)と呼ばれるメモリー領域も利用する。 この領域で利用されるメモリーは、Javaプログラムのコンテクストの変更不可能なデータを保存しているため、ほぼ全くガベージコレクションされることない。 また、これにより、動的言語の実装は、スクリプトの極一部しかコンパイルできない。[13]
JSR 292は以下を提案する。
- 既に存在するクラスを読み込み、変更して、変更されなかった部分の構造とデータを共有した新しいクラスを作る機構を提案する。これにより、Permanent Generation領域は利用されない。
- 新しい
invokedynamic
バイトコードを追加し、この種の呼び出しをJVMが最適化できるようにする。[3]
Remove ads
関連項目
脚注
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads