Androidアプリケーションは、基本的に仮想プロセッサであるJVM(Dalvik VM)で実行され、すべての仮想命令は基盤となるチップセットのネイティブ命令にマッピングする必要があるため、このマッピングのオーバーヘッドにより、このマッピングにより消費電力が増加しますか?
この質問はJavaに拡張でき、「Javaアプリケーションはより多くの電力を使用しますか?」と表現することもできます。これが、Androidスマートフォンが他のプラットフォーム/携帯電話と比較してひどいバッテリー寿命を持っている理由ですか?
編集:私が誤ってJVMとDalvikについて交換可能に話したので、私はいくつかのポイントを明らかにした回答に基づいて。このビットでは、Javaについてより多くの電力を使用するかどうかを尋ねるだけですが、そうであれば、概念的にAndroidにも適用され、バッテリー寿命が短くなります。
コンテキスト:ウィキペディアからの引用:
- Javaバイトコードは、Cコードのアセンブリ言語に似ています。
- コンパイラの観点から見ると、Java仮想マシンは、コードを生成できる命令セットであるJavaバイトコードを備えた単なるプロセッサです。
- JVMにはスタックアーキテクチャがあります。Dalvikは、JVMと同じタイプの仮想化ではないプロセス仮想マシンであり、レジスタアーキテクチャを備えています。
Javaプログラミング言語は(アセンブリのような)バイトコードにコンパイルされ、仮想プロセッサで実行されるため、真のソフトウェアコードの移植性を提供します。また、Linux用のJVMがあり、Linuxはオープンハードウェアに移植されているため、この組み合わせにより、スタック全体でアプリケーションの真の移植性を実現できます。
パワー:質問は本質的にこれに要約されます-ソフトウェアコードまたはアプリケーションの同じ機能セットに対して、CPUクロックサイクルの何パーセントがランタイム環境に起因するのか。これは、バイトコードが基礎となるチップセットのネイティブ命令にコンパイルされる場合、ランタイムはjitコンパイル中にのみアクティブになります。したがって、電力消費のオーバーヘッドが発生すると予想されるランタイム環境を使用する際に、CPUクロックサイクルがどれだけ多く使用されるのか。静的に型付けされ、構築された言語と比較した相対的なパフォーマンスではなく、電力消費の側面にのみ興味があり、Javaの利点を理解しています。関連する可能性のあるサブ質問:
- Javaランタイムはその機能のためにlibcを使用しますか?
- これらの消費電力関連のポイントは、Dalvik VMおよびAndroidに変換されますか?
- 画面やワイヤレスチップセットについて話すことなく、Androidの貧弱なバッテリー消費を一般化する代わりに、iPhone 5が現代のNexus携帯電話と比べて小さい1440 mAHバッテリーを持っていることについて話しましょう。この一連の思考(Java、仮想プロセッサ、命令マッピング、Android)が生まれたのは、iPhoneの愛好家の友人が、これが自分のiPhoneが私の(素晴らしい)ネクサスよりもバッテリー寿命が長い理由だと主張したからです。
いずれにせよ、以下の回答をありがとう。