Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Son los programas escritos en Java para Android más lento que el equivalente escrito en C incluido 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 cuán rápido será, si se implementa en Java. Una cierta preocupación es el hecho de que el código de Java se debe traducir muchas veces (al bytecode, entonces a un nativo que usa JIT). Puede afectar negativamente a una propiedad en tiempo real (respuesta), ¿verdad?

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

  • ¿Estoy consiguiendo los pasos correctos para verificar la suscripción de Android de un usuario en la aplicación?
  • FragmentActivity no se puede resolver a un tipo
  • Android Push Notification (GCM), ¿hay algún límite diario?
  • ¿Cómo se utiliza el método getView () y dónde se llama?
  • Mejores Prácticas para el Manejo de la Búsqueda
  • Android Reemplazar "..." con elipsis
  • ¿Vincular servicio a FragmentActivity o Fragment?
  • Phonegap.js bloquea la aplicación Android
  • Mejor manera de determinar si existe un valor en el feed de JSON
  • AccountManagerFuture.getResult () da como resultado la pantalla "No se puede iniciar sesión"
  • ¿Qué componente de visualización utiliza Google Plus App (Stream)?
  • SIGSEGV cargando HTML + Flash en un WebView
  • 6 Solutions collect form web for “¿Son los programas escritos en Java para Android más lento que el equivalente escrito en C incluido en Objective-C para iOS?”

    Buena pregunta. Hace varios años el rendimiento de la JVM de Sun (ahora Oracle) se pondría pálido en comparación con el código nativo. Pero las cosas han cambiado .

    En primer lugar, la VM que ejecuta Android no es su JVM estándar. Es una VM reforzada reescrita por Google específicamente para uso móvil, donde el rendimiento de la interfaz de usuario se da prioridad.

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

    Por último, se ha escrito mucho acerca de las comparaciones entre iOS y Android en términos de rendimiento. Aquí hay un quinto enlace sólo para patadas. Hay mucho más por ahí. Se trata de varios factores – qué tipo de código que necesita para ejecutar, lo que sus expectativas de rendimiento son, y cuánto está dispuesto a invertir para exprimir más la explosión de su dinero. Y si crees que Dalvik es tu cuello de botella, eres capaz de escribir nativos C / C ++ y usar JNI en Android.

    Como prueba, una vez escribí una aplicación de prueba que ejecutó un algoritmo de clasificación en una lista aleatoria grande.

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

    Sospecho que típicamente verá Java ejecutándose unas 5 veces más lento que el equivalente C en la misma plataforma.

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

    No se puede comparar el rendimiento de esta manera. Su aplicación se ejecutará en diferentes piezas de hardware con diferentes características de rendimiento. Las diferencias en el rendimiento entre java / objetivo c es muy probablemente insignificante en comparación con la influencia del hardware. Debe analizar los cuellos de botella de su aplicación y comprobar si el hardware de destino puede soportarlo. Si se implementa en Java no importa mucho.

    Aunque no te importe, sí, el bytecode Java puede ser un poco más lento. Si usted está totalmente preocupado por el rendimiento, entonces podría utilizar el NDK, y escribir la mayor parte de la aplicación en C (++).

    La decisión de ir a otra plataforma generalmente viene del lado de los negocios, no de la ingeniería. En cuanto a la velocidad – depende. Mientras tanto JIT tiende a ser muy rápido, y utiliza algunas optimizaciones en el tiempo de ejecución, que no están disponibles para los programas C compilados.

    Sin embargo, es imposible predecir qué penaltiues de rendimiento o ventajas podrían surgir de portar sin saber lo que hace su programa.

    Y hay opción para ir con código C nativo que se accede desde la aplicación de Android – su rendimiento dependería de hardware y ser predecible.

    Android Java no se interpreta exactamente como usted piensa. De hecho, el bytecode de Java ni siquiera llega al dispositivo porque el dalvik VM (la JVM de Android) no interpreta el bytecode de Java, ejecuta el bytecode DEX que está más cerca del formato del procesador nativo. Por lo tanto, es realmente difícil "adivinar" o extrapolar lo que la diferencia de rendimiento entre Objective-C y Android en una longitud de brazos sólo basados ​​en saber uno es Java y uno es código nativo. Por no hablar de que tiene su sistema operativo para comparar también: Linux variante vs núcleo Mach. A continuación, Android no asigna programas a procesos de la misma manera que iOS. Dadas las diferencias en lenguaje, OS, mapeo de sistema y variaciones en el código subyacente de SDK, realmente no puedes decidir sin hacer un poco de trabajo a tu lado si vas a tener problemas de rendimiento o no. Pero, que realmente no debería importar, porque si hay una demanda y la necesidad de su programa en Android las fuerzas del mercado debe ser mucho más convincente que los problemas de rendimiento. Ya sabes el viejo dicho: "Si es realmente importante para ti, encontrarás un camino, si no, encontrarás una excusa".

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.