2009-07-20 6 views
29

私が見てきた正当性は、AndroidのJavaバイトコードを「育てる」と言いましょう。しかし、バイトコードを変更することで、Jazelle mootなどのハードウェアアクセラレーション技術が作成されず、実際にモバイルJavaプラットフォームで利用できるパフォーマンスが低下することはありませんか?AndroidはJazelleの技術を去勢しますか?

ターゲットプラットフォームがARMベースのモバイルプラットフォームであることがわかりました。それは他のCPUアーキテクチャー上でより良いパフォーマンスを提供するかもしれませんが、それはARMとJazelleの面で吐き出されるようです。

Javaのパフォーマンスにはどのような量的効果がありますか?

実際にパフォーマンスが向上しますか?

他のプラットフォームではどのような影響がありますか? (すなわちx86の、MIPS、yadda、yadda、yadda ...)

+3

+1。私はこれがどのようにプログラミングに関連しているのか分かりません。 –

+2

Jazelleはほとんどがなくなりました。いくつかのコアは単にエントリ/ exit/undefined-instruction-trapを実装し、ソフトウェアで行うよりも遅い、すべてを実装するライブラリに依存しています。 – rsaxvc

答えて

16

はいDalvikはJazelleを役に立たなくします。唯一の問題は、Jazelleが最初に役立つか、それとも90%のマーケティング誇大宣伝ですか?良いJITまたはAOT(時間の先行)コンパイラは、特殊な命令を使用しようとするよりもはるかに優れたパフォーマンスを提供する傾向があります。 Dalvikのレジスタベースのアプローチは、伝統的なJavaバイトコードインタープリタよりも速いかもしれませんが、インタープリタのものとJITのものの間のマイナーな違いがあれば可能です。うまくいけば、Androidの次のバージョンの1つにJITがあります。

最先端のガベージコレクタとオプティマイザを備えた優れた仮想マシンを作成するには、5〜10年かかります。 Sun(およびマイクロソフト)はその年を過ごしました。 Googleはそうではありません。うまくいけば、彼らはいつもAndroid Javaコードが90%遅くならないように投資を続けます。

+0

Jazelleの命令セットはよく分かりませんが、バイトコードに適用した場合の概念は論理的に見えます。バイトコードは単に「神話」プロセッサのマシンコードに過ぎないからです。 Jazelleのパフォーマンスに問題はありますか?バイトコードが中間表現であることは変わっていないので、効率的なTimeコンパイルの先を買うことができます。これは、通常のコンパイラとまったく同じ概念です。 JITにも同じことが当てはまりますが、コードを実行している間はJITを実行するために余分なサイクルを使用する必要があります。 – NoMoreZealots

+0

私の意図は、あなたの答えに異議を唱えることではなく、もっと情報を得ることです。 – NoMoreZealots

+4

Jazelleは正常に動作します(通常のバイトコードに対して2〜4x)が、JITよりも2〜4倍速います。 Sun HotSpotの論文を読んだら、最新のJITがコードフロー分析を行うことでできる最適化(インライン化関数、仮想呼び出しオーバーヘッドの排除、同期の必要性の排除、オブジェクト割り当ての回避など)を見ることができます。 Jazelleはそれらのどれもすることはできません。 Jazellesは悪くないですが、386,486とコア2のどちらかを選択する場合は、コア2が必要です。 – hacken

4

Wikipedia: Dalvik virtual machine

機スタックされるほとんどの仮想マシンと真のJava VMとは異なり、のDalvik VMはレジスタベースのアーキテクチャです。 VMは、より少ないスペースを使用するようにスリム化された

  • が低いメモリ要件に合わせて最適化されている、のDalvikは、他の標準の仮想マシンからそれを区別するいくつかの特定の特性を有しています。

  • Dalvikにはジャストインタイムコンパイラはありません。
  • 定数プールは、インタープリタを単純化するために32ビットインデックスのみを使用するように変更されました。
  • Javaバイトコードではなく、独自のバイトコードを使用します。

さらに、Dalvikは、デバイスがVMの複数のインスタンスを効率的に実行できるように設計されています。

編集Open Handset Alliance:ウィキペディアを参照してください。創立メンバーには、Intel、Motorola、Qualcomm、Texas Instrumentsが含まれます。 ARMは1年後の2008年12月に参加しました。したがって、オープンソースのiPhone/Blackberryの競合他社を作成することが目標だったとき、非会員による独自のテクノロジに依存することは意味がありませんでした。

+0

純粋なソフトウェアの実装ではこれが得られますが、Jazelleは方程式に変数を追加して、そのプラットフォームで性能を低下させずに乾燥させます。 – NoMoreZealots

2

私は、Dalvikが実行効率よりもスペース効率を上げることを実際に意図していたと感じました。また、ウィキペディアから:

非圧縮 .dexファイルは通常、同じ.classファイルから派生圧縮の.jar(Javaアーカイブ)よりもサイズが数パーセント小さくなっています。

現行の電話機でJazelleのサポートを受けているARMを使用している可能性がありますが、必ずしもそうなるとは限りません。ウィキペディアからも

は(警告:伝聞):

公表仕様はのJazelleを使用するJVMをサポートすることができ、オペレーティングシステムのコードを書くためだけの十分なされて、非常に不完全です。宣言された意図は、JVMソフトウェアだけがハードウェアインターフェースの詳細に依存する必要がある(または許可される)ことです。この緊密な結びつきにより、ハードウェアとJVMが他のソフトウェアに影響を与えることなく進化することが容易になります。実際には、これによりJazelleを利用できるJVMをARM Holdingsがかなり制御できます。また、オープンソースのJVMがJazelleを使用できないようにします。

DalvikにJITterを追加すると、それはすべて間違いになります。

+0

誇大宣伝は、レジスタベースのモデルがパフォーマンスを向上させると考えていることです。 eed3si9nの投稿を確認してください。私はJazelleがJIT単独よりも優れたパフォーマンスを提供していることを読んだことがありますが、JITterについても同じことが予想されます。具体的にはわかりませんが、ARMにはMixed JIT/Jazelleの操作を含むパフォーマンス向上を目的としたJava関連の技術がありますが、それはBSのマーケティングだけかもしれません。 – NoMoreZealots