No siempre tenemos la imagen completa de los elementos que afectan la performance de un programa, sobre todo de los programas en arquitecturas y lenguajes de programación modernos donde parece que vamos perdiendo el control de todos los elementos que participan. En
este artículo encontramos algunos detalles que nos hacen caer en cuenta de estos elementos: manejo de memoria manual vs automático, optimizaciones debido al manejo de punteros, jerarquías de memoria (la importancia de aprovechar las memorias locales más rápidas), el costo de ejecución de un lenguaje con compilación JIT, etc. Yo, por lo menos, me he sentido más informado luego de leerlo.
Palabras clave: C, java, JIT, manejo automático de memoria, memoria cache, performance, punteros
Comentarios
Realmente uno sale más informado.
La percepción mítica de GC hace más lenta la performance de un programa Java no es real. En el pasado he defendido que la evolución del hardware iba a reducir la brecha de rendimiento en tiempos de ejecución entre C y Java, ahora puedo decir que no solamente esto reduce la brecha sino existe una tecnología de sowtare que aprovecha mejor el hardware (JIT, algoritmo GC... etc).
Java es lento
para el usuario común y corriente en desktop.
La principal razón es el I/O, la gente confunde la "lentitud" de un programa por la memoria o el procesador, cuando en realidad la mayor causa es I/O.
Claro que luego de cargar la aplicación y bibliotecas a memoria, la velocidad en ciertas condiciones puede ser igual o superior a C++. Puede ver los comentarios en barrapunto sobre el mismo artículo.
Pero, la comparación es GCC vs Java (sun). Por que el compilador -los binarios compilados- de intel para c/c++ (icc) es más rápido que gcc -en arq. intel por supuesto-.