De acuerdo, esto debería preguntárselo a alguien de Google, pero solo quiero otras opiniones.
Incluso Android admite aplicaciones de código nativo, la principal herramienta de desarrollo es Java. ¿Pero por qué? Quiero decir, ¿no es demasiado lento interpretar el código en un dispositivo móvil? Al presentar Froyo, Google dijo que el nuevo compilador JIT puede lograr aplicaciones de 2 a 5 veces más rápidas. Esto significa que usar Java sobre código nativo es 2 veces más lento.
Sí, sé que usar aplicaciones de código administrado es más seguro en términos de estabilidad del sistema, ya que la máquina virtual tiene un mejor control del programa, pero aún así, esta caída de rendimiento es enorme y no veo por qué usarla.
Respuestas:
Algunos puntos:
Java es un lenguaje conocido, los desarrolladores lo conocen y no tienen que aprenderlo
es más difícil dispararse con Java que con código C / C ++ ya que no tiene aritmética de punteros
se ejecuta en una máquina virtual, por lo que no es necesario volver a compilarlo para todos los teléfonos disponibles y es fácil de proteger
gran número de herramientas de desarrollo para Java (ver punto 1)
varios teléfonos móviles ya usaban Java ME, por lo que Java era conocido en la industria
la diferencia de velocidad no es un problema para la mayoría de las aplicaciones; si lo fuera, deberías codificar en lenguaje de bajo nivel
fuente
En el nivel de código de bytes, Android no usa Java. La fuente es Java, pero no usa una JVM.
fuente
La mejora de la estabilidad del sistema es muy importante en un dispositivo como un teléfono celular.
La seguridad es aún más importante. El entorno de Android permite a los usuarios ejecutar aplicaciones de confianza parcial que podrían explotar el teléfono de formas realmente desagradables sin una excelente seguridad. Al ejecutar todas las aplicaciones en una máquina virtual, garantiza que ninguna aplicación pueda explotar el kernel del sistema operativo a menos que haya una falla en la implementación de la VM. La implementación de VM, a su vez, es presumiblemente pequeña y tiene una superficie de seguridad pequeña y bien definida.
Quizás lo más importante es que cuando los programas se compilan para codificar una máquina virtual, no es necesario volver a compilarlos para hardware nuevo. El mercado de chips para teléfonos es diverso y cambia rápidamente, por lo que es un gran problema.
Además, el uso de Java hace que sea menos probable que las aplicaciones que escriben las personas sean explotadas. Sin saturaciones de búfer, errores con punteros, etc.
fuente
El código nativo no es necesariamente más rápido que el código Java. ¿Dónde muestran los datos de su perfil que el código nativo podría ejecutarse más rápido?
¿Por qué Java?
Android se ejecuta en muchas plataformas de hardware diferentes. Debería compilar y optimizar su código nativo para cada una de estas diferentes plataformas para ver los beneficios reales.
Hay una gran cantidad de desarrolladores que ya dominan Java.
Java tiene un gran soporte de código abierto, con muchas bibliotecas y herramientas disponibles para facilitar la vida de los desarrolladores.
Java lo protege de muchos de los problemas inherentes al código nativo, como pérdidas de memoria, mal uso del puntero, etc.
Java les permite crear aplicaciones sandbox y crear un mejor modelo de seguridad para que una aplicación incorrecta no pueda acabar con todo su sistema operativo.
fuente
En primer lugar, según Google, Android no usa Java. Es por eso que Oracle está demandando a Google. Oracle afirma que Android infringe alguna tecnología Java, pero Google dice que es Dalvik.
En segundo lugar, no he visto un intérprete de código de bytes de Java desde 1995.
¿Puede respaldar su conjetura de desempeño con algunos puntos de referencia reales? El alcance de sus presunciones no parece justificado dada la información de antecedentes inexacta que proporciona.
fuente
Java tiene un argumento bastante convincente para que Google lo use en Android: tiene una gran base de desarrolladores. Todos estos desarrolladores están (en cierto modo) listos para desarrollar para su plataforma móvil.
Tenga en cuenta que, técnicamente hablando, Android no usa Java puro .
fuente
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 familiares para muchos desarrolladores móviles existentes.
Finalmente, diría que es una apuesta contra el futuro: cualquier problema de rendimiento que exista se volverá irrelevante a medida que el hardware mejore, igualmente al hacer que los desarrolladores codifiquen contra una abstracción, Google puede arrancar y cambiar el sistema operativo subyacente mucho más fácilmente, que si los desarrolladores estaban codificando para las API POSIX / Unix.
Para la mayoría de las aplicaciones, la sobrecarga de usar un lenguaje basado en VM sobre el nativo no es significativa (el cuello de botella para las aplicaciones que consumen servicios web, como Twitter, es principalmente de redes). Palm WebOS también lo demuestra, y utiliza JavaScript en lugar de Java como lenguaje principal.
Dado que casi todas las máquinas virtuales JIT se compilan en código nativo, la velocidad del código sin procesar suele ser comparable con la velocidad nativa. Una gran cantidad de retrasos atribuidos a lenguajes de nivel superior tienen menos que ver con la sobrecarga de la VM que con otros factores (un tiempo de ejecución de objeto complejo, comprobación de 'seguridad' del acceso a la memoria mediante comprobación de límites, etc.).
También recuerde que, independientemente del lenguaje 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 es simplemente encadenar llamadas a la API.
Existen, por supuesto, muchas excepciones a esta regla: juegos, aplicaciones de audio y gráficos que superan los límites del hardware del teléfono. Incluso en iOS, los desarrolladores a menudo recurren a C / C ++ para obtener velocidad en estas áreas.
fuente
El nuevo JIT ejecuta las aplicaciones de 2 a 5 veces más rápido que el antiguo dalvikVM (ambos JAVA). Entonces, la comparación no es C sobre JAVA, sino JIT sobre dalvikVM.
fuente
En primer lugar, se trata de lo mismo que Windows Mobile o iPhone, el framework .net necesita su propia máquina virtual y cocoa.
E incluso si el rendimiento no es el mejor, debido a que es una interpretación del código de bytes, Android trae a toda la comunidad Java como desarrolladores potenciales. Más aplicaciones, más clientes, etc.
Para terminar, ningún rendimiento no es tan malo, es por eso que java se usa incluso en dispositivos más pequeños (ver JavaMe).
fuente