ランタイムシステムと仮想マシン
ランタイムシステムと仮想マシンは、プログラムの実行環境を提供し、中間コードの解釈またはコンパイルを行い、実行中のプログラムが必要とするサービスを管理します。
PaperMindでテーマを探す近日公開Find papers & topics
Tools & resources
Learn & explore
動画近日公開
Definition
ランタイムシステムとは、プログラム自身のコードを超えてその実行をサポートするソフトウェア環境であり、仮想マシンとは、ポータブルな命令セットを解釈またはコンパイルし、移植性とランタイムサービスを提供する抽象的な実行エンジンです。
Scope
このトピックでは、コンパイルされたコードとハードウェアの間の層について扱います。具体的には、バイトコードインタプリタと抽象マシン、ジャストインタイム(JIT)コンパイル、動的ディスパッチとメソッドルックアップ、呼び出し規約とスタック管理、および例外処理やリフレクションなどのランタイムサービスが含まれます。また、ポータブルな仮想マシンの設計と、マネージド言語を効率的にする技術についても論じます。
Core questions
- 仮想マシンはどのようにしてハードウェア間の移植性を提供しますか?
- ジャストインタイムコンパイルは、どのようにしてインタプリテーションとネイティブコードを組み合わせますか?
- 動的ディスパッチとメソッドルックアップは、どのようにして効率化されますか?
- マネージド言語をサポートするために、どのようなランタイムサービスが必要ですか?
Key theories
- ポータブル仮想マシンアーキテクチャ
- Java仮想マシン仕様は、ポータブルで検証可能なバイトコードと実行モデルを定義しており、仮想マシンがどのように言語を特定のハードウェアから切り離すかを示しています。
- ジャストインタイムコンパイル
- Aycockは、ランタイムが実行中にコードをネイティブ形式にコンパイルする技術を概観しており、ランタイム情報を使用して、インタプリテーションの起動時間とコンパイル済みコードのスループットのバランスを取る方法を説明しています。
- 動的ディスパッチのためのインラインキャッシュ
- DeutschとSchiffmanによるSmalltalkの実装は、インラインキャッシュと動的変換を導入しました。これらは、動的ディスパッチ言語におけるメソッドルックアップを高速化するための重要な技術です。
Clinical relevance
仮想マシンとマネージドランタイムは、Java、.NET、JavaScript、Pythonなどの広く利用されているプラットフォームを支え、移植性、安全性、適応的最適化を提供します。JITコンパイルとインラインキャッシュは、高水準で動的な言語が競争力のあるパフォーマンスを達成できる理由となっています。
History
抽象マシンは、初期のポータブルシステムやSmalltalkにまで遡ります。Smalltalkの1984年の実装は、動的変換とインラインキャッシュの先駆けとなりました。Java仮想マシンは1990年代半ばにポータブルなバイトコードを普及させ、HotSpotなどの適応型JITコンパイラ、そして後のJavaScriptエンジンは、主流のマネージド言語に積極的なランタイム最適化をもたらしました。
Debates
- インタプリテーション対ジャストインタイムコンパイル
- ランタイム設計者は、高速な起動と低いメモリ使用量を持つ単純なインタプリタと、ウォームアップ時間と実装の複雑さを犠牲にしてより高いピークパフォーマンスを達成するJITコンパイラを比較検討し、しばしば両者を階層型システムで組み合わせています。
Key figures
- Peter Deutsch
- John Aycock
- James Gosling
- Gilad Bracha
Related topics
Seminal works
- lindholm2014
- aycock2003
- deutsch1984
Frequently asked questions
- この文脈における仮想マシンとは何ですか?
- ここでいう仮想マシンとは、基盤となるハードウェアを抽象化し、ランタイムサービスを提供する、ポータブルな命令セット(バイトコードなど)を実行するソフトウェア実行エンジンのことであり、コンピュータ全体をエミュレートするものではありません。
- ジャストインタイムコンパイルはどのようにパフォーマンスを向上させますか?
- JITコンパイラは、プログラムの頻繁に実行される部分を実行時にネイティブコードに変換します。これにより、事前コンパイラにはないプロファイリング情報が利用され、ホットコードがほぼネイティブの速度で実行されるようになります。