トップQs
タイムライン
チャット
視点

Da Vinci Machine

ウィキペディアから

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

歴史

Thumb

Java 7以前には、Java仮想マシンには動的型付け言語のサポートが組み込まれていなかった。

  • 既存のJVM命令セットは静的に型付けされている。[2]
  • JVMは既存のクラスとメソッドを動的に変更するサポートは限定的であった。当時はデバッグ環境でのみ動かせた。

JSR 292 (Supporting Dynamically Typed Languages on the Java Platform)[1]は、以下を提案した。

  • 新しくinvoledynamic命令をJVMレベルで追加する。これにより、動的な型チェックによりメソッドを呼び出せるようになる。[3][4][5]
  • プロダクション環境で実行時に、クラスとメソッドを動的に変更できるようにする。

JRubyJava実装の成功により、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]

その後、プロジェクトはJDKのコードベースに統合され、[12] JDK 7リリースの一部となった。

Remove ads

アーキテクチャー

動的呼び出しは、Javaが言語レベルで強く静的に型付けされた言語であっても、型の情報はバイトコードレベルでは広く利用されていないという事実に基づいている。

しかし、動的言語の実装は、 パフォーマンスを良くし、実行時にスクリプトをバイトコードにコンパイルするために、 (リフレクションではなく) just-in-timeコンパイルを利用できる必要がある。 [要出典] Java仮想マシンで実行できるためには、これらのバイトコードは実行の前に検証されなくてはならない。検証機構は、コードを通じて型が静的であることをチェックする。 これによりメソッド呼び出しの引数のシグネチャーの変更のたびに、異なるバイトコードを生成しなくてはならない。 これは、メモリーを多く利用するだけでなく、JVMがクラスに関する情報を保存するのに使うヒープ領域であるMetaspace (Java 8以前ではPermanent Generation)と呼ばれるメモリー領域も利用する。 この領域で利用されるメモリーは、Javaプログラムのコンテクストの変更不可能なデータを保存しているため、ほぼ全くガベージコレクションされることない。 また、これにより、動的言語の実装は、スクリプトの極一部しかコンパイルできない。[13]

JSR 292は以下を提案する。

  • 既に存在するクラスを読み込み、変更して、変更されなかった部分の構造とデータを共有した新しいクラスを作る機構を提案する。これにより、Permanent Generation領域は利用されない。
  • 新しいinvokedynamicバイトコードを追加し、この種の呼び出しをJVMが最適化できるようにする。[3]
Remove ads

関連項目

  • 動的言語ランタイム — Microsoftによる.NET Frameworkの共通言語ランタイムで動的言語をサポートするための環境
  • Nashorn — Da Vinci Machineに基づく

脚注

外部リンク

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads