Re: Benchmarking en distintos lenguajes [ Era algo así como cliente en jabber... ]

Franco Catrin L. fcatrin en tuxpan.com
Vie Nov 16 14:23:44 CLST 2007


Rodrigo Fuentealba escribió:
>> La máquina virtual de Java igual te va a compilar el código a código de
>> máquina y eso es lo que va a ejecutar, se demorará la primera vez pero
>> en los casos en donde importa el rendimiento (loops) sólo se hace al
>> principio.  El byte-code no es código interpretado, es código de máquina
>> para una máquina virtual (oh!).
>>     
>
> O sea... es algo así como los compilados de cobol que después tenías
> que ejecutarlos con runcobol...
>   
Segun entiendo esos no son compilados reales, runcobol es un interprete, 
no una maquina virtual.
Tanto Java como .NET utilizan codigo de maquina independiente de la 
máquina, pero es código de máquina al fin (stack, registros, etc).  Es 
por eso que no es dificil aplicar JIT o incluso compilacion previa (GCJ 
en Java o -aot en Mono).

>> Hay algunas cosas que funcionan más rápido en Java pero no por un tema
>> de compiladores, sino que por otros aspectos como por ejemplo el
>> mecanismo de Garbage Collection que funciona de forma asincrona (pero no
>> en paralelo).
>>     
>
> Estuve viendo eso relacionado con Microsoft.NET; jamás se me ocurrió
> aplicar eso a Java. Bueeena!
>   

Sumale eso a que cuando hay suficiente RAM puede funcionar muy bien.  
Piensa en un simple "add" de un puntero al pedir memoria.  Un par de 
lecturas interesantes:

http://www.ibm.com/developerworks/java/library/j-jtp11253/
http://www.ibm.com/developerworks/java/library/j-jtp09275.html

>> El tema de por qué las aplicaciones en Java funcionan lento tiene varias
>> causas, desde complejidad en exeso en el diseño de aplicaciones hasta el
>> uso y abuso de conceptos avanzados de  Estupidez Artificial y Lógica
>> Confusa ;)
>>     
>
> jajajajajaja yeah. Creo que los programadores Java se engrupen mucho
> con lo difíciles que pueden llegar a ser sus aplicaciones; alguien me
> comentó que, de hecho, el inventor de la programación orientada a
> objetos se hizo netamente con el objetivo de ganar más plata nada más.

Yo creo que eso es una leyenda urbana como una entrevista que vi por ahi 
al creador de C++ (AFAIR).
La programación orientada a objetos es de gran ayuda, incluso el kernel 
de Linux es orientado a objetos!

El problema esta cuando el nivel de abstracción te oculta lo que esta 
sucediendo por debajo, y se hacen cosas demás en forma involuntaria.  
Recuerdo que Federico Mena comentaba que muchos problemas de performance 
se habian resuelto simplemente aplicando strace para ver qué estaba 
sucediendo por debajo y ahi encontraron que en aplicaciones como 
OpenOffice (y tambien en GNOME) se abrian y procesaban archivos 
inmutables una y otra vez, en vez de una sola vez al principio.  Es 
facil tener ese problema, cuando las aplicaciones crecen y tienes una 
gran base de código te comienzas (al fin) a enfocar mas en el qué y no 
en el cómo, pero si te descuidas comienzas a mal usar lo que ya tienes.

Tambien hay casos en que la gente no sabe ni le interesa lo que sucede 
por debajo y hacen grandes desastres de aplicaciones, al final le echan 
la culpa a la complejidad del problema, al lenguaje o a la máquina, pero 
objetivamente los problemas que solucionan la mayoria de las 
aplicaciones no son complejos.


--
Franco


Más información sobre la lista de distribución Linux