¿Por qué Android usa código Java, cuando Objective C es mucho más rápido que Java en ejecución?

Gracias por el A2A. La persona adecuada para responder esto es probablemente alguien de Google, pero aquí está mi perspectiva sobre esto …

Android está basado en Linux, que es muy ligero cuando lo comparas con muchos otros sistemas operativos. Técnicamente, Android debería haber sido uno de los sistemas operativos más rápidos, sin embargo, hubo una serie de decisiones que se tomaron mal. Con los años, me di cuenta de que es una de las piezas de software más defectuosas de la historia. Incluso los IDE en los que desarrolla Android son altamente inestables. Y desarrollar en Android es difícil. Lea mi respuesta aquí para saber por qué >> ¿Por qué es tan difícil el diseño de Android?

Se necesitaron muchas versiones de Android incluso para que el desplazamiento fuera suave (eso se solucionó solo en JellyBean). Incluso el AOTC no es tan bueno como se afirmaba. Creo que Android es el ejemplo perfecto de la frase “Demasiados cocineros estropean el caldo”. De lo contrario, no tendrás errores estúpidos como este. Si bien es ampliamente utilizado como sistema operativo, es solo porque el hardware que se envía es barato. Esto es análogo a cómo se distribuye Windows, excepto que Android es completamente gratuito.

Android se ejecuta sobre una VM especializada llamada Dalvik VM, que es diferente de la JVM estándar. Dado que los teléfonos móviles son muy livianos, se han eliminado muchas bibliotecas, ya que no funcionarán en un entorno con poca memoria y bajo procesador. Linux ya está fuertemente basado en C y Google podría haber elegido fácilmente escribir buenas bibliotecas en él y convertirlo en la plataforma más rápida, pero no lo hicieron. De acuerdo con esta respuesta ¿Por qué Android usa Java? eligieron Java debido al nivel de familiaridad. Pero, sinceramente, he visto hasta ahora que han tomado una serie de decisiones equivocadas. Realmente espero que la plataforma mejore a medida que escribo aplicaciones para otros a pesar de mi elección personal de un teléfono que es el iPhone (que me encanta).

Java no es un lenguaje interpretado, y no lo ha sido en varias versiones. El código de bytes de Java se JIT’ed sobre la marcha. (Técnicamente, todavía interpreta parte del código, pero todo lo que importa en cuanto al rendimiento se JIT)
En cuanto al rendimiento, ¿qué demonios te da la loca idea de que “hay una línea de base para los gastos generales”? No hay Nunca hubo y nunca habrá. No entre C ++ y Java, y no entre Python y Javascript, o cualquier otro lenguaje. Hay cosas que su versión específica de JVM hará más rápido que su compilador de C ++ específico, y cosas que su compilador de C ++ específico hará mejor que su JVM específico.
Por lo tanto, la “sobrecarga” de su elección de idioma depende completamente de 1) lo que desea que haga su código y 2) cómo escribe su código.
Si toma un programa Java y lo traduce a C ++, el resultado seguramente será más lento.
Si toma un programa C ++ y lo traduce a Java, eso también se ejecutará más lentamente.
No porque un idioma sea “más rápido” que el otro, sino porque el programa original fue escrito para un idioma y fue diseñado para funcionar bien en ese idioma. Y cualquier intento de traducirlo a otro idioma perderá esta ventaja. Terminas con un programa Java de estilo C ++, que no se ejecutará eficientemente en la JVM, o un programa C ++ de estilo Java, que también funcionará terriblemente .
Ninguna especificación de lenguaje contiene una cláusula que “y el resultado debe ser al menos x% más lento que el lenguaje y”. Tanto su compilador de C ++ como la JVM hacen todo lo posible para que las cosas vayan rápido.
Y luego las características de rendimiento que está viendo hoy pueden cambiar mañana. Los idiomas no tienen velocidad.
fuente: Empresa de aplicaciones móviles y desarrollo web EE. UU. – iOS, Android, HTML5, Javascript

Este es un tema muy debatido entre los desarrolladores de aplicaciones móviles. Incluso Python, Lua y JavaScript fueron considerados para Android en sus primeras etapas.

Estoy seguro de que hubo muchas razones técnicas por las cuales Java terminó convirtiéndose en lenguaje de programación para Android. Pero una de las razones principales fue en 2005 (cuando Andy Rubin acababa de comenzar a trabajar en Android) Java era uno de los lenguajes de programación más conocidos y florecientes. Android solo quería aprovechar eso. Eso es todo.

De hecho, he creado un video detallado sobre este tema en mi canal de YouTube: CodeTutor.

Espero que esto ayude.

Obj-C no es necesariamente más rápido que Java.

Puede hacer puntos de referencia para demostrar que uno es más rápido que el otro, ninguno se refleja necesariamente en la vida real.

Java puede correr bastante rápido, y puede correr muy lento, se trata de cómo se usa.

Android parece bastante lento, sí, pero también lo hace GNOME, y eso está escrito en C, por lo que no se trata realmente de la elección del idioma. Si elige un idioma, probablemente pueda encontrar algo bien escrito, rápido y eficiente. También puedes encontrar lo contrario.

Si ha tenido que programar en ambos, sabría una razón. Objective-C es un lenguaje horrible; fue una de las primeras versiones OO de C, y sufre de tener una compatibilidad total con C (que Java no tiene). Java se desarrolló mucho más tarde y es mucho más limpio. Por todos sus detractores, dudo que pocas personas prefieran programar en Objective C que en Java.