Dado que las aplicaciones de Android se ejecutan en una JVM (Dalvik VM) que es básicamente un procesador virtual, y cada instrucción virtual tiene que asignarse a la instrucción nativa del conjunto de chips subyacente, ¿esta asignación genera más consumo de energía debido a la sobrecarga de esta asignación?
Esta pregunta puede extenderse a Java y también expresarse como "¿las aplicaciones Java usan más potencia?". ¿Es por eso que los teléfonos Android tienen una duración de batería tan terrible en comparación con otras plataformas / teléfonos?
Editar : Basado en las respuestas, he aclarado algunos puntos porque había hablado erróneamente de JVM y Dalvik indistintamente. En este momento, estoy hablando de Java solo para preguntar si usa más energía y, en caso afirmativo, ¿eso también se aplica conceptualmente a Android y da como resultado una menor duración de la batería?
Contexto : citado de Wikipedia:
- El código de bytes de Java es análogo al lenguaje ensamblador para el código C.
- Desde el punto de vista de un compilador, la máquina virtual Java es solo otro procesador con un conjunto de instrucciones, Java bytecode, para el cual se puede generar código.
- JVM tiene una arquitectura de pila. Dalvik es una máquina virtual de proceso que no es el mismo tipo de virtualización que JVM y tiene una arquitectura de registro.
Dado que el lenguaje de programación Java se compila en bytecode (como ensamblado) y se ejecuta en un procesador virtual, proporciona una verdadera portabilidad del código de software. Además, dado que hay una JVM para Linux y Linux se ha portado en hardware abierto, la combinación puede proporcionar una verdadera portabilidad de la aplicación en toda la pila.
Potencia : la pregunta se reduce esencialmente a esto: para el mismo conjunto de funcionalidades de su código de software o aplicación, qué porcentaje de los ciclos de reloj de su CPU se atribuyen al entorno de tiempo de ejecución. Esto es con el entorno de compilación Just-In-Time de las JVM modernas, donde si el bytecode se compila a la instrucción nativa del conjunto de chips subyacente, entonces el tiempo de ejecución solo debería estar activo durante la compilación jit. Entonces, ¿cuánto más ciclos de reloj de CPU se utilizan para tener el entorno de tiempo de ejecución que se espera que genere una sobrecarga de consumo de energía? Solo me interesa el aspecto del consumo de energía, y no el rendimiento relativo en comparación con los lenguajes estáticamente escritos y construidos, y entiendo las ventajas de Java. Subpreguntas que pueden estar relacionadas:
- ¿El tiempo de ejecución de Java utiliza la libc por su funcionalidad?
- ¿Alguno de estos puntos relacionados con el consumo de energía se traducen en Dalvik VM y Android?
- En lugar de generalizar el bajo consumo de batería de Android sin hablar de la pantalla y los conjuntos de chips inalámbricos, hablemos de cómo el iPhone 5 tiene una batería de 1440 mAH que es pequeña en comparación con los teléfonos Nexus modernos. Todo este tren de pensamiento (Java, procesador virtual, mapeo de instrucciones, Android) surgió porque un amigo leal al iPhone afirmó que esta podría ser la razón probable de que su iPhone tenga una mejor duración de la batería que mi (impresionante) nexo.
En cualquier caso, gracias por las respuestas a continuación.