なぜJVMスタックベースとDalvik VMレジスタベースがあるのですか?
-
01-10-2019 - |
質問
私は興味があります、なぜSunはJVMスタックベースを作ることに決めたのですか、GoogleはDalvikvmをレジスタベースにすることにしましたか?
JVMは、プラットフォームが独立しているはずであるため、ターゲットプラットフォームで特定の数のレジスタが利用可能であるとは本当に想定できないと思います。したがって、JITコンパイラにレジスタアラケーションなどを延期します。 (私が間違っている場合は修正してください。)
それで、Androidの人たちは、「ねえ、それは非効率的だ、すぐにレジスターベースのVMを選びましょう...」と思ったのですか?しかし、待って、複数の異なるAndroidデバイスがあり、Dalvikはどのレジスタをターゲットにしましたか? Dalvik Opcodesは、特定の数のレジスタ用にハードコードされていますか?
市場にある現在のすべてのAndroidデバイスには、ほぼ同じ数のレジスタがありますか?または、Dex-Loading中にレジスタの再配分が実行されますか?これはすべて一緒にどのように適合しますか?
解決
Javaの設計目標によく合うスタックベースのVMには、いくつかの属性があります。
スタックベースの設計では、ターゲットハードウェア(レジスタ、CPU機能)に関する仮定がほとんどないため、さまざまなハードウェアにVMを簡単に実装できます。
命令のオペランドはほぼ暗黙的であるため、オブジェクトコードは小さくなる傾向があります。これは、遅いネットワークリンクを介してコードをダウンロードする場合に重要です。
レジスタベースのスキームを使用することは、おそらくDalvikのコードジェネレーターがパフォーマンスコードを作成するために一生懸命機能する必要がないことを意味します。非常に登録豊富なまたは登録不足のアーキテクチャで実行することは、おそらくハンディキャップダルヴィクですが、それは通常のターゲットではありません - アームは非常に中間の道のアーキテクチャです。
また、Dalvikの最初のバージョンにJITがまったく含まれていないことを忘れていました。指示を直接解釈する場合、レジスタベースのスキームはおそらく解釈パフォーマンスの勝者です。
他のヒント
参照は見つかりませんが、SunはスタックベースのBytecodeアプローチを決定したと思います。
の Dalvik VM内部 Google I/O 2008から、Dalvikの作成者 ダン・ボーンスタイン スライド35でレジスタベースのVMを選択するための以下の引数を提供します プレゼンテーションスライド:
登録機
なんで?
- 命令の発送は避けてください
- 不要なメモリアクセスを避けてください
- 命令ストリームを効率的に消費する(命令あたりのセマンティック密度が高い)
そしてスライド36:
登録機
統計
- 指示が30%少ない
- コードユニットが35%少ない
- 命令ストリームの35%多くバイト
- しかし、私たちは一度に2つを消費することができます
Bornsteinによると、これは「クラスファイルのセットをDEXファイルに変換するときに見つけることができる一般的な期待」です。
の関連部分 プレゼンテーションビデオは25:00から始まります.
タイトルの洞察に満ちた論文もあります 「仮想マシンの対決:スタック対レジスタ」Shi et al。 (2005), 、スタックベースの仮想マシンとレジスタベースの仮想マシンの違いを調査します。
SunがJVMをスタックベースにすることにした理由がわかりません。 erlangs仮想マシン、ビームはパフォーマンス上の理由に基づいてレジスタです。また、パフォーマンスの理由により、Dalvikも登録に基づいているようです。
から Pro Android 2:
Dalvikは、スタックの代わりに主にデータストレージユニットとしてレジスタを使用します。 Googleは、結果として30%少ない指示を達成したいと考えています。
コードサイズに関して:
Dalvik VMは、生成されたJavaクラスファイルを取得し、それらを1つ以上のDalvik実行可能ファイル(.DEX)ファイルに結合します。複数のクラスファイルから複製情報を再利用し、従来の.JARファイルからスペース要件(非圧縮)を半分に削減します。たとえば、AndroidのWebブラウザアプリの.DEXファイルは約200kですが、同等の非圧縮されていない.JARバージョンは約500Kです。目覚まし時計の.dexファイルは約50kで、そのサイズの約2倍の.jarバージョンです。
そして、私が覚えているように コンピューターアーキテクチャ:定量的アプローチ また、レジスタマシンはスタックベースのマシンよりも優れたパフォーマンスを発揮します。