Karena aplikasi Android berjalan pada JVM (Dalvik VM) yang pada dasarnya adalah prosesor virtual, dan setiap instruksi virtual harus dipetakan dengan instruksi asli chipset yang mendasarinya, apakah pemetaan ini menghasilkan konsumsi daya yang lebih besar karena overhead pemetaan ini?
Pertanyaan ini dapat diperluas ke Java dan juga diucapkan sebagai "apakah aplikasi Java menggunakan lebih banyak daya?". Apakah ini sebabnya ponsel Android memiliki daya tahan baterai yang mengerikan dibandingkan dengan platform / ponsel lain?
Sunting : Berdasarkan jawaban saya telah mengklarifikasi beberapa poin karena saya telah salah berbicara tentang JVM dan Dalvik secara bergantian. Dalam bagian ini saya berbicara tentang Jawa hanya untuk menanyakan apakah ia menggunakan lebih banyak daya dan jika ya, apakah itu secara konseptual berlaku untuk Android juga dan apakah hal itu menghasilkan daya tahan baterai yang lebih rendah.
Konteks : dikutip dari Wikipedia:
- Java bytecode analog dengan bahasa assembly untuk kode C.
- Dari sudut pandang kompiler, mesin virtual Java hanyalah prosesor lain dengan set instruksi, Java bytecode, yang kodenya dapat dihasilkan.
- JVM memiliki arsitektur stack. Dalvik adalah mesin virtual proses yang bukan jenis virtualisasi yang sama dengan JVM dan memiliki arsitektur register.
Karena bahasa pemrograman Java dikompilasi ke bytecode (seperti assembly) dan dijalankan pada prosesor virtual, ia menyediakan portabilitas kode perangkat lunak yang sebenarnya. Juga, karena ada JVM untuk Linux dan Linux telah porting ke perangkat keras yang terbuka, kombinasi tersebut dapat memberikan portabilitas aplikasi yang sebenarnya di seluruh tumpukan.
Daya : Pertanyaan pada dasarnya bermuara pada hal ini - untuk serangkaian fungsi yang sama dari kode perangkat lunak atau aplikasi Anda, berapa persen dari siklus jam CPU Anda dikaitkan dengan lingkungan run time. Ini dengan lingkungan kompilasi Just-In-Time dari JVM modern di mana jika bytecode dikompilasi dengan instruksi asli chipset yang mendasarinya, maka run-time hanya akan aktif selama kompilasi jit. Jadi berapa banyak lagi siklus clock CPU yang digunakan dalam memiliki lingkungan run-time yang diharapkan menghasilkan overhead konsumsi daya. Saya hanya tertarik pada aspek konsumsi daya, dan bukan kinerja relatif dibandingkan dengan bahasa yang diketik dan dibangun secara statis dan memahami keunggulan Jawa. Sub-pertanyaan yang mungkin terkait:
- Apakah waktu Java Run menggunakan libc untuk fungsionalitasnya?
- Apakah ada dari titik-titik terkait konsumsi daya ini yang diterjemahkan ke VM Dalvik dan Android?
- Alih-alih menggeneralisasi konsumsi baterai Android yang buruk tanpa membicarakan layar dan chipset nirkabel - mari kita bahas bagaimana iPhone 5 memiliki baterai 1440 mAH yang sangat kecil dibandingkan dengan ponsel Nexus modern. Seluruh rangkaian pemikiran ini (Java, prosesor Virtual, pemetaan instruksi, Android) muncul karena seorang teman setia-iphone mengklaim ini bisa menjadi alasan kemungkinan iphone-nya memiliki daya tahan baterai yang lebih baik daripada nexus (mengagumkan) saya.
Bagaimanapun, terima kasih atas jawaban di bawah ini.