Ingresar:

Pablo Azero :: Blog :: Mito: Java es lento

August 14, 2007

Es verdad que hay una penalidad en la ejecución de programas en Java. Es verdad que la ejecución de la máquina virtual tiene un retardo, que debería ser constante. Es verdad que el ambiente de ejecución debe cargarse y que este también tiene un tiempo constante. Si estás ejecutando una línea de código o 1MLOC este tiempo es igual. Entonces para programas cortos, es posible que la impresión que se tiene respecto al tiempo de ejecución sea que es pesado. Sin embargo, yo pienso que estas apreciaciones no son siempre objetivas, ya que no se hacen las comparaciones en igualdad de condiciones. En la wikipedia encontramos un artículo sobre la performance de Java. En el mismo se discuten distintas técnicas empleadas para mejorar la performance de ejecución de un programa en Java. Al terminar el artículo se proveen varios enlaces en los que uno encuentra información de casos de estudio en los que Java es más rápido que C o C++, pero sin duda también hay otros en los que C o C++ lleva la delantera. Hay artículos de programadores sin mucho conocimiento y otros con mucho conocimiento de la plataforma de trabajo. Esta experiencia influye bastante en la calidad de los datos encontrados. De todos modos hay programadores de todo tipo, y tener toda esa información ayuda a tomar decisiones a la hora de elegir un lenguaje.

Otro factor que influye en la velocidad de los programas es indudablemente el manejo de memoria. No es lo mismo hacerlo automáticamente (como Java) que manualmente (como C o C++). Automáticamente uno tiende a no pensar en los recursos utilizados a menos que sea estrictamente necesario, no nos cuesta usar memoria dinámica. Hay herramientas (profilers) para ver la cantidad de memoria usada y mejorar el código si uno está desperdiciando demasiada memoria. En cambio en lenguajes con manejo manual, hay que tener extremo cuidado en usar estructuras dinámicas, los errores pueden no ser fáciles de encontrar.

En lenguajes como Java en los que la E/S es bastante evolucionada (una solución genérica interesante al problema), la performance puede verse penalizada. La codificación puede no ser tan directa y "linda" como una solución estructurada, pero más eficiente. Es que la "vida real" cuesta. Este puede ser un artículo interesante para explorar mejores formas de E/S en Java.

Un sitio para explorar la performance de Java en general es http://www.javaperformancetuning.com/ .

En todo caso echar la culpa a Java por la baja performance de tu programa es simplemente una falta de conocimiento. Y no es que lo diga yo, lo dicen programadores de computación científica:

"On Intel Pentium hardware, especially with Linux, the performance gap is small enough to be of little or no concern to programmers."

En todo caso sería interesante escuchar las experiencias de personas que han tenido problemas.

Enviado por Pablo Azero


Debes iniciar sesión para enviar un comentario.