MAQUINA VIRTUAL DE JAVA

 

MAQUINA VIRTUAL DE JAVA

Si se desea distribuir un programa escrito en un lenguaje tradicional como Visual Basic. Después de escribir el programa fuente necesitamos compilarlos en archivos de código objeto (.obj) y después enlazar dichos archivos para producir un ejecutable (.exe). Este ejecutable, además de tener todos el código objeto unido, tiene un encabezado para darle al sistema operativo información sobre como debe se ejecutado el archivo .

Este ejecutable seria el que distribuiríamos. Este programa solo podría ejecutarse en computadoras con el sistema operativo para el cual fue desarrollado. Otros sistemas operativos no sabrían el formato del encabezado además que no pudieran ejecutar las llamadas al sistema y ni siquiera tendrían las librerías necesarias (como los DLL.). Aunque tuvieran las librerías de todos modos ni siquiera sabrían como correrlas!

Como podría hacer que mi programa corra en diferentes plataformas (diferentes sistemas operativos corriendo sobre diferente hardware)? Una solución programar la aplicación en un lenguaje que sea soportable por varios sistemas operativos. Un problema que surge aquí es que necesitaría distribuir el código fuente (que no siempre es deseable). Otro problema que surge es que en cada sistema operativo las llamadas al sistema serian diferentes. Por lo que se tendrían que hacer adaptaciones al programa cada vez que se quisiera que fuera soportado por una nueva plataforma.

La solución que propone Java es que el programa no corra sobre el hardware real, sino que corra sobre una maquina virtual. Es decir, dicha maquina no existe sino que es simulada por medio de software. Cada plataforma tendría instalada esta maquina virtual (que es un programa) y a la hora de correr los programas esta maquina virtual los correría. el cual va leyendo el programa y ejecutándolo instrucción por instrucción sobre el hardware real.

A la maquina virtual de Java se le llama Java Virtual Machine (JVM). Los programas fuente de Java ( .java) al compilarse producirían unHconstituido de las instrucciones de la maquina virtual (java byte codes). La maquina virtual ya incluye un set de librerías para las llamadas al sistema.

  1. Ventajas:

    1. Programas portables a cualquier plataforma (que cuente como una JVM).

    2. Diseño simple por no tener que ser backward compatible con nadie (que no era el caso de C++, ya que este tenia que ser backward compatible con C).

    3. Completamente orientado a objetos y con soporte de multithreading.

    4. Ideal para Internet por producir programas pequeños

     

  2. Desventajas:

    1. Corre significativamente mas despacio que si corriera en hardware real.

    2. Hay que aprender un lenguaje nuevo.

    3.  

      Notas:

      1. System es un objeto que se refiere al sistema en donde esta corriendo el programa.

      2. out es el objeto de salida, es equivalente al flujo de salida cout de C++.

      3. El nombre del archivo necesita tener el mismo nombre que la clase con extension .java (HelloApp.java)

       

    4. Applet

    5. import java.applet.Applet;

    6. import java.awt.*;

    7.  

    8. class HelloApp extends Applet

    9. {

    10. public void paint (Graphics g)

    11. {

    12. g.drawString ("Hello world !", 0, 20);

    13. }

}

Para ejecutar el programa se tiene que hacer referencia a el desde una pagina para ser ejecutado por el browser.

<HTML>
<HEAD>
<TITLE>Hello world</TITLE>
</HEAD>
<BODY>
<APPLET CODE="HelloApp.class" WIDTH=250 HEIGHT=100>
</APPLET>
</BODY>
</HTML>

Nota:

El comando Applet dentro del HTML le dice al browser a crear, posisionar y dimensionar la ventana de applet. Tambien asocia al applet con la ventana. Sin embargo el browser no tiene ni idea de que poner en la ventana. Lo que hace el browser es llamar al metodo paint(Graphics) cada vez que desee que se despliegue el contenido de la ventana (la primera vez y cada vez que quiere re desplegar el contenido).

                        VOLVER A LA PAGINA PRINCIPAL