Oke, ini harus benar-benar ditanyakan kepada seseorang dari Google, tapi saya hanya ingin pendapat lain.
Bahkan Android mendukung aplikasi kode Native, alat pengembangan utamanya adalah Java. Tapi kenapa? Maksud saya, bukankah terlalu lambat untuk menafsirkan kode di perangkat seluler? Saat memperkenalkan Froyo, Google mengatakan bahwa compiler JIT baru dapat mencapai aplikasi 2-5 kali lebih cepat. Ini berarti, penggunaan Java melalui kode native 2-x kali lebih lambat.
Ya, saya tahu bahwa menggunakan aplikasi kode terkelola lebih aman dalam hal stabilitas sistem, karena mesin virtual memiliki kontrol program yang lebih baik, tetapi tetap saja, penurunan kinerja ini sangat besar, dan saya tidak mengerti mengapa menggunakannya.
Jawaban:
Beberapa poin:
Java adalah bahasa yang dikenal, pengembang mengetahuinya dan tidak harus mempelajarinya
lebih sulit untuk menembak diri sendiri dengan Java daripada dengan kode C / C ++ karena tidak memiliki aritmatika penunjuk
ini berjalan dalam VM, jadi tidak perlu mengkompilasinya ulang untuk setiap telepon di luar sana dan mudah diamankan
sejumlah besar alat pengembangan untuk Java (lihat poin 1)
beberapa ponsel sudah menggunakan Java ME, sehingga Java dikenal di industri
perbedaan kecepatan tidak menjadi masalah bagi sebagian besar aplikasi; jika itu Anda harus membuat kode dalam bahasa tingkat rendah
sumber
Pada level kode byte, Android tidak menggunakan Java. Sumbernya adalah Java, tetapi tidak menggunakan JVM.
sumber
Peningkatan stabilitas sistem sangat penting pada perangkat seperti ponsel.
Keamanan bahkan lebih penting. Lingkungan Android memungkinkan pengguna menjalankan aplikasi semi tepercaya yang dapat mengeksploitasi ponsel dengan cara yang benar-benar tidak menyenangkan tanpa keamanan yang sangat baik. Dengan menjalankan semua aplikasi di mesin virtual, Anda menjamin bahwa tidak ada aplikasi yang dapat mengeksploitasi kernel OS kecuali jika ada cacat dalam implementasi VM. Implementasi VM, pada gilirannya, mungkin kecil dan memiliki permukaan keamanan kecil yang terdefinisi dengan baik.
Mungkin yang paling penting, ketika program dikompilasi menjadi kode untuk mesin virtual, mereka tidak harus dikompilasi ulang untuk perangkat keras baru. Pasar chip ponsel beragam dan cepat berubah, jadi itu masalah besar.
Selain itu, menggunakan Java membuat kecil kemungkinan aplikasi yang ditulis orang akan dapat dieksploitasi sendiri. Tidak ada buffer-overruns, kesalahan dengan pointer, dll ...
sumber
Kode asli tidak selalu lebih cepat dari kode Java. Di manakah data profil Anda yang menunjukkan bahwa kode asli dapat berjalan lebih cepat?
Mengapa Java?
Android berjalan di banyak platform perangkat keras yang berbeda. Anda perlu mengompilasi dan mengoptimalkan kode asli Anda untuk masing-masing platform berbeda ini untuk melihat manfaat nyata.
Ada banyak sekali pengembang yang sudah mahir di Java.
Java memiliki dukungan sumber terbuka yang sangat besar, dengan banyak pustaka dan alat yang tersedia untuk membuat hidup pengembang lebih mudah.
Java melindungi Anda dari banyak masalah yang melekat pada kode native, seperti kebocoran memori, penggunaan pointer yang buruk, dll.
Java memungkinkan mereka membuat aplikasi kotak pasir, dan membuat model keamanan yang lebih baik sehingga satu Aplikasi yang buruk tidak dapat menghapus seluruh OS Anda.
sumber
Pertama-tama, menurut Google, Android tidak menggunakan Java. Itu sebabnya Oracle menuntut Google. Oracle mengklaim bahwa Android melanggar beberapa teknologi Java, tetapi Google mengatakan itu adalah Dalvik.
Kedua, saya belum pernah melihat juru kode byte Java sejak 1995.
Dapatkah Anda mendukung dugaan kinerja Anda dengan beberapa tolok ukur aktual? Ruang lingkup anggapan Anda tampaknya tidak dapat dibenarkan mengingat informasi latar belakang yang Anda berikan tidak akurat.
sumber
Java memiliki argumen yang cukup menarik untuk Google yang menggunakannya di Android: Java memiliki basis pengembang yang sangat besar. Semua pengembang ini (semacam) siap mengembangkan untuk platform seluler mereka.
Perlu diingat bahwa, secara teknis, Android tidak menggunakan Java murni .
sumber
Seperti disinggung di tempat lain, masalah utamanya adalah Android dirancang sebagai OS portabel, untuk berjalan di berbagai perangkat keras. Itu juga membangun kerangka kerja dan bahasa yang akrab bagi banyak pengembang seluler yang ada.
Akhirnya, saya akan mengatakan ini adalah taruhan melawan masa depan - masalah kinerja apa pun yang ada akan menjadi tidak relevan karena perangkat keras meningkat - sama dengan membuat pengembang membuat kode terhadap abstraksi, Google dapat merobek dan mengubah OS yang mendasarinya jauh lebih mudah, daripada jika pengembang sedang membuat kode ke API POSIX / Unix.
Untuk sebagian besar aplikasi, overhead penggunaan bahasa berbasis VM dibandingkan native tidak signifikan (hambatan untuk aplikasi yang menggunakan layanan web, seperti Twitter, sebagian besar adalah jaringan). Palm WebOS juga mendemonstrasikan ini - dan itu menggunakan JavaScript daripada Java sebagai bahasa utama.
Mengingat bahwa hampir semua VM JIT dikompilasi ke kode asli, kecepatan kode mentah sering kali sebanding dengan kecepatan asli. Banyak penundaan yang dikaitkan dengan bahasa tingkat yang lebih tinggi tidak terlalu berkaitan dengan overhead VM dibandingkan faktor lainnya (runtime objek yang kompleks, pemeriksaan 'keamanan' akses memori dengan melakukan pemeriksaan batas, dll).
Ingat juga bahwa terlepas dari bahasa yang digunakan untuk menulis aplikasi, banyak pekerjaan sebenarnya yang dilakukan di API tingkat yang lebih rendah. Bahasa tingkat atas sering kali hanya merangkai panggilan API.
Tentu saja ada banyak pengecualian untuk aturan ini - aplikasi game, audio, dan grafik yang mendorong batasan perangkat keras ponsel. Bahkan di iOS, pengembang sering menggunakan C / C ++ untuk mendapatkan kecepatan di area ini.
sumber
JIT baru menjalankan aplikasi 2 - 5 kali lebih cepat daripada dalvikVM lama (keduanya JAVA). Jadi perbandingannya bukanlah C melalui JAVA, tetapi JIT melalui dalvikVM.
sumber
Pertama-tama ini hampir sama dengan windows mobile atau iPhone, framework .net membutuhkan VM dan cocoa sendiri.
Dan bahkan jika kinerjanya tidak terbaik, karena ini adalah interpretasi dari kode byte, android membawa seluruh komunitas java sebagai pengembang potensial. Lebih banyak aplikasi, lebih banyak klien, dll.
Untuk menyelesaikannya, tidak ada kinerja yang tidak terlalu buruk, itulah mengapa java digunakan bahkan pada perangkat yang lebih kecil (lihat JavaMe).
sumber