Comparación de rendimiento entre Java y C en un Nexus 5
La inmensa mayoría de aplicaciones en Android están escritas en el lenguaje de programación Java.
Esta necesita de una máquina virtual para funcionar que durante las últimas versiones había sido Dalvik, y que en KitKat ha empezado a sustituirse por ART, una versión mucho mejor.
A raíz de este cambio los chicos de Learn OpenGL han decidido crear diversas apps para probar la velocidad de los distintos idiomas de programación y hasta qué punto aprovechan la velocidad de la CPU para ofrecer un mejor rendimiento.
Comparación de rendimiento entre ART, Dalvik y C en un Nexus 5
No entraremos en detalles técnicos, pero el autor crea un filtro DSP para generar código con mkfilter. Este se implementa de tres formas; uno en C, otra en Java y otra en Java con algunas optimizaciones manuales para aprovechar donde este idioma puede ser mejor. Unas optimizaciones que la mayoría de apps no introducen.
Los resultados se muestran en la siguiente tabla y han sido realizados sobre un Nexus5.
Como vemos, la diferencia entre C y Java (ART y Dalvik) es enorme. Hasta casi 18 veces más lento Java en Dalvik que con apps en C.
También podemos ver como se ha mejorado mucho ART respecto a Dalvik, aunque esta diferencia sería menor si los programadores aprovechasen todas las virtudes de Java, y es que en los resultados optimizados manualmente, no se percibe tanta diferencia entre Dalvik y ART. Esta diferencia de esfuerzo no solo es cuestión de microsegundos, sino de energía utilizada por las CPUs, lo que al final se traduce en batería para nuestros dispositivos.
Unos resultados que demuestran lo increíblemente rápido que es C, el gran trabajo a pesar de ser una beta todavía que se ha hecho con ART y como de lenta es la ya algo antigua Dalvik.
Java, no tan mala elección
El autor, no contento con esto continúa su pequeño experimento y prueba el mismo código pero en un PC con un procesador Intel Core i7 a 2,6GHz, mucho más potente que el Snapdragon800 del Nexus5, pero, y aquí está lo interesante, solo se consiguen resultados 2 o 3 veces más rápido en Java, a pesar de que la CPU sea considerablemente muchísimo más rápida. Parece ser que Java no está tan mal implementado en Android.
¿Cómo sería Android escrito en C? Muchísimo más rápido, con interfaces que se abren al instante y un rendimiento muchísimo mayor. ¿Por qué no entonces se apuesta por ese idioma? La razón es práctica, al ser un lenguaje de programación de bajo nivel la dificultad para crear apps en C es enorme, crear una simple app de un botón o una pantalla con un mensaje sería un verdadero quebradero de cabeza, ya no digamos apps más complejas.
Y es que al final no todo es velocidad, también el sentido práctico. Aún así una bonita comparativa que queríamos compartir con vosotros y que pone en contexto el porqué de Java como lenguaje preferido de Android.
Más información Learn OpenGL