0900SIM無しさん (ワッチョイ bf28-rKKb)
2018/02/15(木) 13:48:29.26ID:det3/SPY0バッテリー容量のwAhからアプリの連続稼働時間を測定してやればワットパフォーマンスが計算でき、同じバッテリー容量に換算するとJavaのオーバーヘッドやCPUの速度の差が出る。
CPU上でネイティブ実行されるiOSアプリと、Java仮想マシンで実行されるAndroidアプリの速度なんて比べるまでもなくiOSの圧勝なのはアプリ開発者なら誰でも理解していることだ。
起動速度が違うのはAndroid APIやネイティブライブラリのロードが後ろで遅延されてるだけの話。adbで実行ログを見てみれば起動時に必要なライブラリしかロードされていないってのがすぐ分かるぞ。USBデバッグをオンにすれば誰でも見られる。
つまりAndroidは、起動時にはスプラッシュ画面に必要なAPIしか呼ばれてない。iOSは内部実装がよく分からないから推測でしかないが、ロード時に初期化をまとめてやってるんだろう。XcodeやAppStoreで規約として決まってる訳ではないけど。
そもそも、アプリの起動速度よりも実行速度の方が実際に使う時には重要。iOSがLLVM最適化objcバイナリなのに対して、AndroidはJavaを仮想マシンで実行しているのでどうしてもオーバーヘッドが乗る。
このオーバーヘッドを誤魔化すためにAndroidはiPhoneの数割多くバッテリーを積んでいる場合が多い。特にフラグシップ機はiPhoneに劣る稼働時間だと購入時に選択肢にすら上がらないので大容量バッテリーを無理に載せてる。
しかしながら、Androidがあのクソ遅いJavaをここまで高速化したのには驚いた。ARM側のJava支援機能(jazelle)てのが昔はあったんだが、dalvik VMのdexコードに変換したせいで互換性が無くなりCPU側の支援が受けられないのにここまで速くなるとはな。