Como se mencionó en otra parte, el problema principal es que Android está diseñado como un sistema operativo portátil, para ejecutarse en una amplia variedad de hardware. También se basa en un marco y un lenguaje familiar para muchos desarrolladores móviles existentes. Por último, diría que es una apuesta contra el futuro: independientemente de los problemas de rendimiento que existan, ya que el hardware mejora. Igualmente, al hacer que los desarrolladores codifiquen contra una abstracción, Google puede arrancar y cambiar el sistema operativo subyacente. fácilmente, que si los desarrolladores estuvieran codificando las API de POSIX/Unix.
Para la mayoría de las aplicaciones, la sobrecarga de usar un lenguaje basado en VM sobre nativo no es significativo (el cuello de botella para las aplicaciones que consumen servicios web, como Twitter, es en su mayoría redes). Palm WebOS también demuestra esto, y eso usa JavaScript en lugar de Java como idioma principal.
Dado que casi todas las máquinas virtuales JIT compilan hasta el código nativo, la velocidad del código sin formato a menudo es comparable con la velocidad nativa. Una gran cantidad de retrasos atribuidos a los lenguajes de alto nivel tienen menos que ver con la sobrecarga de la VM que otros factores (un tiempo de ejecución de objetos complejo, acceso a la memoria de 'seguridad' al verificar los límites, etc.).
Recuerde también que, independientemente del idioma utilizado para escribir una aplicación, gran parte del trabajo real se realiza en API de nivel inferior. El lenguaje de nivel superior a menudo solo encadena las llamadas API juntas.
Existen, por supuesto, muchas excepciones a esta regla: juegos, audio y aplicaciones de gráficos que superan los límites del hardware del teléfono. Incluso en iOS, los desarrolladores a menudo descienden a C/C++ para obtener velocidad en estas áreas.
El código de Java no se interpreta, al menos no en Android: se compila y se ejecuta en una máquina virtual. –
Pensé que Sun demostró que Java puede ser (en algunas áreas, pero a menudo casi) tan rápido como el código nativo. Además, los chicos de Google son un paquete inteligente: confío en que el JIT que introdujeron recientemente tarde o temprano producirá un código muy bueno. – delnan
Acerca del problema de rendimiento, ¿no es el código nativo siempre más rápido que bytecode? ¿Dado que la CPU puede ejecutarlo directamente sin una máquina virtual? No estoy familiarizado con la forma en que funcionan Dalvik y otras máquinas virtuales, pero primero se debe traducir bytecode a código de máquina, y eso debe consumir mucho rendimiento con solo copiar a la memoria RAM y ejecutar código nativo ... –