1. Módulo 1: Getting Started
Archivo: Material de Apoyo
Universidad Veracruzana
Asesor: José Said Olano García
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
2. Java es el primer lenguaje que tiene la virtud de ser
compilado e interpretado de forma simultánea.
Cuando un programador realiza una aplicación o un
applet en Java y lo compila, en realidad, el
compilador no trabaja como un compilador de un
lenguaje al uso.
El compilador Java únicamente genera el
denominado ByteCode. Este código es un código
intermedio entre el lenguaje máquina del procesador
y Java. Evidentemente este código no es ejecutable
por sí mismo en ninguna plataforma hardware, pues
no se corresponde con el lenguaje de ninguno de los
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
3. procesadores que actualmente se conocen (habrá
que esperar a ver qué ocurre con los procesadores
Java). Por lo tanto, para ejecutar una aplicación
Java es necesario disponer de un mecanismo que
permita ejecutar el ByteCode. Este mecanismo es la
denominada Máquina Virtual Java. En cada
plataforma (Unix, Linux, Windows 95/NT, Macintosh,
etc.) existe una máquina virtual específica. Así que
cuando el ByteCode llega a la máquina virtual, ésta
lo interpreta pasándolo a código máquina del
procesador donde se esté trabajando, y ejecutando
las instrucciones en lenguaje máquina que se
deriven de la aplicación Java. De este modo, cuando
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
4. el mismo ByteCode llega a diferentes plataformas,
éste se ejecutará de forma correcta, pues en cada
una de esas plataformas existirá la máquina virtual
adecuada. Con este mecanismo se consigue la
famosa multiplataforma de Java, que con sólo
codificar una vez, podemos ejecutar en varias
plataformas.
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
5. En realidad la máquina virtual desempeña otras
funciones, como la de aislar los programas Java al
entorno de la máquina virtual, consiguiendo una
gran seguridad.
Sin embargo, como podrá estar deduciendo el
lector, esto tiene algunas desventajas, y la más
clara es la velocidad de ejecución. Puesto que la
máquina virtual debe estar interpretando
constantemente el ByteCode, se consume
demasiado tiempo de procesador en realizar esta
interpretación, que por otra parte no aporta nada a
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
6. la aplicación, obteniendo así un bajo rendimiento.
Para solucionarlo se han adoptado soluciones
intermedias. Una de las más novedosas y útiles son
los compiladores JIT (Just-In-Time). Estos
compiladores están situados a la entrada de la
máquina virtual, de forma que según llega el
ByteCode lo van compilando al lenguaje máquina del
procesador. A diferencia de la interpretación, el
compilador no ejecuta el ByteCode, únicamente lo
traduce y lo almacena en código nativo dentro de la
máquina virtual. Así, una vez que la aplicación está
dentro de la máquina virtual, ya se encuentra en
lenguaje máquina y, por lo tanto, será directamente
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
7. ejecutable, sin necesidad de interpretaciones,
consiguiendo dotar de mayores rendimientos a la
aplicación.
Que Java es lento, resultará pues evidente, pero
vamos, hasta los más pesimistas respecto a Java,
como Microsoft, reconocen que Java obtendrá
gracias a los compiladores JIT un rendimiento
cercano al 80% del de C++, lo cual es más que
suficiente para la mayoría de las aplicaciones; y más
aún si se tiene en cuenta el sector al cual va dirigido
Java, porque, al fin y al cabo, tampoco se trata de
escribir el Doom III en Java.
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
8. No obstante, el uso de ByteCode no es la única
causa de que Java sea más lento que C++. Porque
este último lenguaje no tiene un recolector de
basura, ni que cargar clases dinámicamente, ni
realizar comprobaciones en tiempo de ejecución
como la de los límites de los arrays, las condiciones
de seguridad o que el ByteCode no esté manipulado
para acceder ilegalmente a campos marcados como
privados o protegidos. Estas características suponen
una sobrecarga importante, sólo el recolector de
basura puede superar el 15%, y son la causa última
de que Java no pueda alcanzar el cien por cien del
rendimiento de C++. A pesar de todo, hay grandes
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
9. expectativas en la compilación dinámica y en la
propia mejora de los elementos que integran la
máquina virtual como el recolector de basura,
porque afortunadamente, a diferencia de otras
ocasiones, muchas empresas e investigadores no se
han quedado en una queja estéril y se han puesto a
trabajar para solucionar estas cuestiones. A cambio
de este incremento de la carga se obtiene mayor
fiabilidad, lo que reduce ostensiblemente el coste de
mantenimiento y un sinfín de nuevas posibilidades.
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx
10. Muy breve y de forma muy genérica, este es el
funcionamiento básico de Java. Todas las mejoras al
lenguaje se centran básicamente en conseguir
mejores tiempos de ejecución y dotar de mayores
prestaciones a la máquina virtual
Presa Tepuxtepec No. 40, Col. Loma Hermosa, México D.F. CP 11200. Tel: 5580 1069 / 1355
www.develop.com.mx