質問

DalvikのVMでほとんどすべてのJavaを実行できることは知っていますが、 JavaのVM で実行できますが、制限はあまり明確ではありません。誰かが主要な障害に遭遇しましたか?主要なライブラリに問題がありますか? Javaバイトコードにコンパイルする言語( Scala Jython など)は期待どおりに動作しませんか?

役に立ちましたか?

解決

Dalvikが処理しない、または標準のJavaバイトコードとまったく同じ方法で処理しないものがいくつかありますが、それらのほとんどは非常に高度です。

最も厳しい例は、ランタイムバイトコード生成とカスタムクラスのロードです。バイトコードを作成してからクラスローダーを使用してロードしたい場合、そのトリックが通常のマシンで動作する場合、バイトコードの生成を変更しない限り、Dalvikでは動作しないことが保証されています。

これにより、特定の依存性注入フレームワークを使用できなくなります。最も有名な例はGoogle Guiceです(ただし、一部の人々はそれに取り組んでいるはずです)。一方、AspectJはコンパイル手順としてバイトコードインスツルメンテーションを使用するため、動作するはずです(ただし、だれかが試みたとしても私は知らない)。

他のjvm言語と同様に、最終的に標準バイトコードにコンパイルされ、実行時にバイトコードインストルメンテーションを使用しないものはすべてDalvikに変換でき、動作するはずです。人々がAndroidでJythonを実行し、それがうまくいったことを知っています。

他に注意すべきことは、ジャストインタイムコンピレーションがありません。これは厳密にはDalviksの問題ではありません(必要に応じてその場でいつでもバイトコードをコンパイルできます)が、そのAndroidはそれをサポートしておらず、そうすることはほとんどありません。標準Javaのマイクロベンチマークは役に立たないという効果があります-コンポーネントはテストでの実行時の特性が大規模システムの一部とは異なります-Androidスマートフォンのマイクロベンチマークはまったく理にかなっています。

他のヒント

ここに追加できるもう1つの点は、リフレクションAPIを使用してクラスのフィールドをリストするときに、Dalvikがフィールドの順序を保持していないことです。さて、リフレクションAPIはとにかくそれを保証しません(そのため、理想的にはとにかくそれに依存すべきではありません)が、他のほとんどのVMは順序を維持します

会話に追加するだけで、古いスレッドを復活させることを意図していません。私は検索でこれに出くわしましたが、JythonはDalvikでもすぐに動作しないことを付け加えたいと思います。 Hello Worldの例を実行すると、次の結果が得られます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top