Dalvikをどのように改善しますか? Androidの仮想マシン
-
06-07-2019 - |
質問
現在、Androidプラットフォームに関する論文を書いています。いくつかの研究の後、Dalvikには改善の余地があることが明らかです。この目標を達成するために開発者の時間を最大限に活用するにはどうすればよいと思いますか?
JITコンパイルは大きなもののように思えますが、このようなリソースの少ないマシンでは、これは限られた用途にしか使用されないと聞きました。これをバックアップするリソースやデータはありますか?
考慮すべき他のオプションはありますか? VMをバイパスする堅牢なネイティブ開発キットの開発は別として。
興味のある方のために、 Dalvik VM 。
どんな質問でも歓迎します。この質問は主観的であると思われます 、私が受け入れる答えには提案された変更を正当化する必要があることを明確にします。 Sun JVMが導入されたときの改善など、バックアップするデータは非常に大きなプラスになります。
解決
- ガベージコレクションの改善:最小化(現在のメモリフラグメンテーションの問題を解消するため)、理想的にはコレクション自体の実行時のCPU負荷を抑える(「ゲームのフレームレートの低下」に関する苦情を減らすため)
- JIT、引用
- NDKと組み合わせた場合、AOTコンパイルオプション用にDalvikバイトコードをネイティブコードにコンパイルできる十分なドキュメント
- Android自体と分離できるようにして、他のプロジェクトがAndroidで実験し、コミュニティの貢献がより多く、より高速なクリップで届くようにします
必要に応じて他のアイデアを思いつくことができると確信しています。
他のヒント
-
JIT。それが役に立たないということは、たくさんのがらくたです。どのコードをJITに選択するかを選択することもできますが、ネイティブコードの1/10のパフォーマンスが常に制限されます
-
まともなGC。最新世代のガベージコレクターには大きなスタッターがありません。
-
コード分析の改善。多くの場合、割り当て/解放を行う必要がない、ロックを保持しているなどがあります。マシンが得意な最適化を行うのではなく、クリーンなコードを書くことができます
理論的には、ほとんどの高レベル言語(Java、Javascript、pythonなど)のほとんどは、ネイティブコードのパフォーマンスの20%以内に収まっている必要があります。しかし、プラットフォームベンダーは数百人以上の開発者を費やす必要があります。 Sun Javaは良くなっています。彼らは10年間もそれに取り組んでいます。
Dalvikの主な問題の1つはパフォーマンスです。これはひどいことですが、私が最も望んでいることの1つは、言語の追加です。
JVMには、プラットフォームでPythonおよびRubyを実行するコミュニティプロジェクトがあり、Scala、Groovy、Closureなどの特別な言語も開発されています。 Dalvikプラットフォームでもこれら(および/またはその他)を見ることができればうれしいです。 Sunは、JVMの動的タイピング拡張機能であるDa Vinciマシンにも取り組んできました。これは、「1つの言語がすべてに適合する」からの大きなシフトを示しています。 Sunが過去15年間に追ってきた哲学。