¿Los progtwigs escritos en Java para Android son más lentos que los equivalentes escritos en C embeddeds en Objective-C para iOS?

Para decidir si está justificado comenzar a portar una aplicación iOS existente (escrita en C) a Android, tengo que estimar qué tan rápido será, si se implementa en Java. Alguna preocupación es el hecho de que el código Java debe traducirse muchas veces (a bytecode, luego a uno nativo usando JIT). Puede afectar negativamente a una propiedad en time real (capacidad de respuesta), ¿verdad?

¿Qué pasa con la calidad del código generado? ¿Es de alguna manera comparable con el código generado por gcc / llvm? En caso afirmativo, ¿tiene una reference a los resultados de la comparación (en papel)?

Buena pregunta. Hace varios años, el performance de Sun (ahora Oracle) JVM palidecía en comparación con el código nativo. Pero las cosas han cambiado .

En primer lugar, la máquina virtual con Android no es su JVM estándar. Es un VM reforzado reescrito por Google específicamente para uso mobile, donde el performance de la interfaz de usuario tiene prioridad.

En segundo lugar, muchas cosas han sucedido en la última década … una cita de este artículo relevante lo dice muy bien: hace Fifteen years ago, all we thought that Java needed to rule the known universe was a faster VM. Ahora tenemos una máquina virtual mucho más rápida.

Finalmente, se ha escrito mucho acerca de las comparaciones entre iOS y Android en términos de performance. Aquí hay un quinto enlace solo para patadas. Hay mucho más por ahí. Se trata de varios factores: qué tipo de código necesita ejecutar, cuáles son sus expectativas de performance y cuánto está dispuesto a invertir para sacar el máximo provecho de su inversión. Y si crees que Dalvik es tu cuello de botella, eres capaz de escribir C / C ++ nativo y usar JNI en Android.

Como testing, una vez escribí una aplicación de testing que ejecutaba un algorithm de sorting en una gran list aleatoria.

La versión C funcionó aproximadamente 10 veces más rápido que la misma versión de Java.

Sospecho que normalmente verá Java ejecutándose aproximadamente 5 veces más lento que el C equivalente en la misma plataforma.

La plataforma en la que se ejecuta también influirá en la velocidad, por supuesto.

No se puede comparar el performance de esta manera. Su aplicación se ejecutará en diferentes piezas de hardware con diferentes características de performance. Las diferencias en el performance entre java / objective c son muy probablemente insignificantes en comparación con la influencia del hardware. Debe analizar los cuellos de botella de su aplicación y verificar si el hardware orientado puede admitirlo. Si se implementa en java, no importa mucho.

Aunque no debería importarle, sí, el bytecode de Java puede ser un poco más lento. Si está totalmente preocupado por el performance, puede usar el NDK y escribir la mayor parte de la aplicación en C (++).

La decisión de optar por el acceso a otra plataforma generalmente proviene del lado comercial, no de la ingeniería. En cuanto a la velocidad, depende. Mientras tanto, JIT tiende a ser realmente rápido, y usa algunas optimizaciones en el time de ejecución, que no están disponibles para los progtwigs comstackdos de C.

Sin embargo, es imposible pnetworkingecir qué sanciones o ventajas de performance podrían popup al portar sin saber lo que hace su progtwig.

Y existe la opción de ir con el código C nativo al que se accede desde la aplicación Android: su perfromance dependerá del hardware y será pnetworkingecible.

Android Java no se interpreta exactamente como piensas. De hecho, Java bytecode ni siquiera llega al dispositivo porque la VM de dalvik (JVM de Android) no interpreta Java bytecode, sino que ejecuta el bytecode DEX, que está más cerca del formatting de procesador nativo. Por lo tanto, es muy difícil "adivinar" o extrapolar cuál es la diferencia de performance entre Objective-C y Android a una longitud de armamento basada en saber que uno es Java y uno es el código nativo. Sin mencionar que también tienen su sistema operativo para comparar: variante de Linux vs. Mach kernel. Entonces, Android no asigna progtwigs a processs de la misma manera que iOS. Dadas las diferencias en el lenguaje, el sistema operativo, el mapeo del sistema y las variaciones en el código SDK subyacente, realmente no puede decidir sin hacer un pequeño trabajo de su lado si va a tener problemas de performance o no. Pero, eso realmente no debería importar, porque si hay una demanda y una necesidad para su progtwig en Android, las fuerzas del mercado deberían ser mucho más atractivas que los problemas de performance. Conoces el viejo dicho: "Si es realmente importante para ti, encontrarás un path. Si no, encontrarás una excusa".