Maquina Virtual Java

5
Maquina Virtual Java Una máquina virtual Java (en inglés Java Virtual Machine, JVM) es una máquina virtual de proceso nativo, es decir, ejecutable en una plataforma específica, capaz de interpretar y ejecutar instrucciones expresadas en un código binario especial (el bytecode Java), el cual es generado por el compilador del lenguaje Java. El código binario de Java no es un lenguaje de alto nivel, sino un verdadero código máquina de bajo nivel, viable incluso como lenguaje de entrada para un microprocesador físico. Como todas las piezas del rompecabezas Java, fue desarrollado originalmente por Sun. La JVM es una de las piezas fundamentales de la plataforma Java. Básicamente se sitúa en un nivel superior al hardware del sistema sobre el que se pretende ejecutar la aplicación, y este actúa como un puente que entiende tanto el bytecode como el sistema sobre el que se pretende ejecutar. Así, cuando se escribe una aplicación Java, se hace pensando que será ejecutada en una máquina virtual Java en concreto, siendo ésta la que en última instancia convierte de código bytecode a código nativo del dispositivo final. La gran ventaja de la máquina virtual java es aportar portabilidad al lenguaje, de manera que desde Sun Microsystems se han creado diferentes máquinas virtuales java para diferentes arquitecturas, y, así, un programa .class escrito en Windows puede ser interpretado en un entorno Linux. Tan solo es necesario disponer de dicha máquina virtual para dichos entornos. De ahí el famoso axioma que sigue a Java: "escríbelo una vez, ejecútalo en cualquier parte", o "Write once, run anywhere". Pero los intentos de la compañía propietaria de Java y productos derivados de construir microprocesadores que aceptaran el Java bytecode como su lenguaje de máquina fueron más bien infructuosos. La máquina virtual de Java puede estar implementada en software, hardware, una herramienta de desarrollo o un Web browser; lee y ejecuta código precompilado bytecodeque es independiente de la plataforma multiplataforma. La JVM provee definiciones para

description

Maquina virtual de Java. Esquema de la arquitectura general de un programa en ejecución en una Máquina Virtual Java.

Transcript of Maquina Virtual Java

Maquina Virtual Java

Unamquina virtual Java(en inglsJava Virtual Machine,JVM) es unamquina virtual de procesonativo, es decir, ejecutable en una plataforma especfica, capaz de interpretar y ejecutar instrucciones expresadas en uncdigo binarioespecial (elbytecode Java), el cual es generado por elcompiladordel lenguajeJava.El cdigo binario de Java no es unlenguaje de alto nivel, sino un verdaderocdigo mquinade bajo nivel, viable incluso como lenguaje de entrada para unmicroprocesadorfsico. Como todas las piezas del rompecabezas Java, fue desarrollado originalmente por Sun.La JVM es una de las piezas fundamentales de laplataforma Java. Bsicamente se sita en un nivel superior al hardware del sistema sobre el que se pretende ejecutar la aplicacin, y este acta como unpuenteque entiende tanto el bytecode como el sistema sobre el que se pretende ejecutar. As, cuando se escribe una aplicacin Java, se hace pensando que ser ejecutada en una mquina virtual Java en concreto, siendo sta la que en ltima instancia convierte de cdigo bytecode a cdigo nativo del dispositivo final.La gran ventaja de la mquina virtual java es aportar portabilidad al lenguaje, de manera que desde Sun Microsystems se han creado diferentes mquinas virtuales java para diferentes arquitecturas, y, as, un programa .class escrito enWindowspuede ser interpretado en un entornoLinux. Tan solo es necesario disponer de dicha mquina virtual para dichos entornos. De ah el famoso axioma que sigue a Java: "escrbelo una vez, ejectalo en cualquier parte", o "Write once, run anywhere".Pero los intentos de la compaa propietaria de Java y productos derivados de construir microprocesadores que aceptaran elJava bytecodecomo su lenguaje de mquina fueron ms bien infructuosos.La mquina virtual de Java puede estar implementada en software, hardware, una herramienta de desarrollo o un Web browser; lee y ejecuta cdigo precompiladobytecodeque es independiente de la plataformamultiplataforma. La JVM provee definiciones para unconjunto de instrucciones, un conjunto de registros, un formato para archivos de clases, la pila, un heap con recolector de basura y un rea de memoria. Cualquier implementacin de la JVM que sea aprobada porSUNdebe ser capaz de ejecutar cualquier clase que cumpla con la especificacin.Existen varias versiones, en orden cronolgico, de la mquina virtual de Java. En general la definicin delJava bytecodeno cambia significativamente entre versiones, y si lo hace, losdesarrolladoresdel lenguaje procuran que existacompatibilidad hacia atrscon los productos anteriores.A partir de J2SE 5.0, los cambios en la especificacin de la JVM han sido desarrollados bajo el auspicio de laJava Community Process(JCP) y especificada en la JSR 924.1Desde el ao 2006, cambios en la especificacin para soportar las modificaciones del formato del fichero de clases (JSR 2022) se estn llevando a cabo en una versin de mantenimiento en la JSR 924. Las especificaciones para la JVM estn publicadas en lo que se conoce como "el libro azul".3As reza el prefacio:Esperamos que esta especificacin documente suficientemente la Mquina Virtual de Java para hacer posibles implementaciones desde cero. Sun proporciona tests que verifican que las implementaciones de la Mquina Virtual de Java opere correctamenteKaffe es un ejemplo de una implementacin de JVM desde cero. Sun es la propietaria de la marca registrada "Java", que usa para certificar aquellas implementaciones que se ajustan y son totalmente compatibles con sus especificaciones.

Entorno de ejecucin[editar]Para poder ejecutar una aplicacin en una Mquina Virtual de Java, el programa cdigo debe compilarse de acuerdo a un formato binario portable estandarizado, normalmente en forma de ficheros con extensin .class. Un programa puede componerse de mltiples clases, en cuyo caso cada clase tendr asociado su propio archivo .class. Para facilitar la distribucin de aplicaciones, los archivos de clase pueden empaquetarse juntos en un archivo con formato jar. Esta idea apareci en la poca de los primeros applets de Java. Estas aplicaciones pueden descargar aquellos archivos de clase que necesitan en tiempo de ejecucin, lo que supona una sobrecarga considerable para la red en una poca donde la velocidad supona un problema. El empaquetado evita la sobrecarga por la continua apertura y cierre de conexiones para cada uno de los fragmentos necesarios.El cdigo resultante de la compilacin es ejecutado por la JVM que lleva a cabo la emulacin del conjunto de instrucciones, bien por un proceso de interpretacin o ms habitualmente mediante un compilador JIT (Just In Time), como elHotSpotde Sun. Esta ltima opcin convierte el bytecode a cdigo nativo de la plataforma destino, lo que permite una ejecucin mucho ms rpida. El inconveniente es el tiempo necesario al principio para la compilacin.En un sentido amplio, la Mquina Virtual de Java acta como un puente entre el resultado de la compilacin (el bytecode) y el sistema sobre el que se ejecuta la aplicacin. Para cada dispositivo debe haber una JVM especfica, ya sea un telfono mvil, un PC con Windows XP o un microondas. En cualquier caso, cada mquina virtual conoce el conjunto de instrucciones de la plataforma destino, y traduce un cdigo escrito en lenguaje Java (comn para todas) al cdigo nativo que es capaz de entender el hardware de la plataforma.El verificador del bytecode[editar]La JVM verifica todo bytecode antes de ejecutarlo. Esto significa que solo una cantidad limitada de secuencias de bytecode forman programas vlidos; por ejemplo, una instruccin JUMP (branch) puede apuntar solo a una instruccin dentro de la misma funcin. A causa de esto, el hecho de que JVM es una arquitectura de pila no implica una carga en la velocidad para emulacin sobre arquitecturas basadas en registros cuando usamos un compilador JIT: no hay diferencia para un compilador JIT si nombra registros con nombres imaginarios o posiciones de pila imaginarias que necesitan ser ubicadas a los registros de la arquitectura objetivo. De hecho, la verificacin de cdigo hace a la JVM diferente de una arquitectura clsica de pila cuya emulacin eficiente con un compilador JIT es ms complicada y tpicamente realizado por un intrprete ms lento.La verificacin de cdigo tambin asegura que los patrones de bits arbitrarios no pueden usarse como direcciones. Laproteccin de memoriase consigue sin necesidad de una unidad de Gestin de Memoria (MMU). As, JVM es una forma eficiente de obtener proteccin de memoria en chips que no tienen MMU.Bytecodes[editar]La JVM tiene instrucciones para los siguientes grupos de tareas: Carga y almacenamiento Aritmtica Conversin de tipos Creacin y manipulacin de objetos Gestin de pilas (pushypop) Transferencias de control (branching) Invocacin y retorno a mtodos ExcepcionesLa clave es la compatibilidad binaria. Cada sistema operativo de un host particular necesita su propia implementacin de JVM y runtime. Estas JVM interpretan el bytecode semnticamente de la misma manera, pero la implementacin actual puede variar. Ms complicado que solo la emulacin de bytecode es la implementacin compatible y eficiente de las API Java, las cuales tienen que ser mapeadas para cada sistema operativo de host.Extensin segura de cdigo remoto[editar]Una arquitectura de mquina virtual permite control de granularidad fina sobre las acciones que el cdigo puede hacer dentro de la mquina. Esto est diseado para permitir ejecucin segura de cdigo no confiable desde fuentes remotas; un modelo usado muy famoso son lasJava applets. Applets se ejecutan dentro de una VM incorporada en el navegador del usuario, ejecutando cdigo descargado desde un servidorHTTPremoto. El cdigo remoto se ejecuta en una "sandbox" altamente restringida, la cual est diseada para proteger al usuario de cdigo errneo o malicioso. Los publicadores con recursos financieros suficientes pueden conseguir un certificado con el cual hacerappletsconfirma digitalque las caractericen como seguras ("safe"), dndoles entonces permisos para salir de la sandbox y acceder al sistema de ficheros local y sistema de red, presumiblemente bajo el control del usuario.Implementaciones de la mquina virtual[editar]La edicin J2SE tiene dos implementaciones de la mquina virtual: Java HotSpot Client VM: La mquina virtual por defecto, preparada para obtener el mximo rendimiento en la ejecucin de aplicaciones en el entorno cliente, por ejemplo, reduciendo al mximo el tiempo de inicio de una aplicacin Java. Java HotSpot Server VM: Preparada para obtener el mximo rendimiento en la ejecucin de aplicaciones en el entorno de los servidores.