Capítulo 5. GCJ : GNU Compiler for Java

Tabla de contenidos
Java en Código Nativo
Java Class Libraries
JNI y SWT
Ventaja para Linux
Perspectivas

Una aplicacion Java con SWT funciona bastante mejor que cualquier aplicacion para escritorio que hayamos visto con SWING o AWT, pero aun podemos llegar más allá.

Como ya se habia mencionado, una aplicación Java corre en una JVM, que es una implementación de una maquina por software. Esta JVM se encarga de convertir los bytecodes a algo que se pueda ejecutar en la maquina real. Esto que es una gran ventaja desde el punto de vista de la programación, es una desventaja a la hora de medir la eficiencia y el rendimiento de la aplicación.

Una forma de mejorar esto es realizar Just In Time Compiling o JITC. Con esta técnica el codigo primero Java es pasado a código nativo y luego ejecutado como tal. En vez de ir instrucción por instrucción, se junta un grupo funcional y se ejecuta.

Las JVM con JITC han significado un avance, pero aun hay una desventaja frente a usar código puro. Y es en este contexto en donde aparece GCJ : GNU Compiler for Java.

Java en Código Nativo

Desde el punto de vista del uso de memoria, en el esquema tradicional se desperdicia memoria, por la carga de la JVM y porque ésta necesita mantener su propio estado de operación al ejecutar Java bytecodes. Por ejemplo el uso JITC requiere que los resultados de la compilacion se vayan almacenando para su uso posterior. Se podria argumentar que la memoria es barata en estos dias, pero cuando se tienen varias aplicaciones corriendo en la misma máquina, hasta una máquina grande puede verse en problemas.

GCJ es un compilador que permite convertir código fuente Java en código nativo. Incluso es capaz de convertir codigo binario java (.class) en código nativo. El código nativo de varias clases se linkea para formar una unica aplicación nativa.

En cuanto a rendimiento, obviamente hay un cambio mas crítico, aunque no hay mediciones suficientes, se puede esperar un aumento de rendimiento entre un 10% a 15% respecto a JITC.