fbpx
Wikipedia

Máquina 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.

Esquema de la arquitectura general de un programa en ejecución en una Máquina Virtual 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 esta 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 navegador web; lee y ejecuta código precompilado bytecode que es independiente de la plataforma multiplataforma. La JVM provee definiciones para un conjunto 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 implementación de la JVM que sea aprobada por SUN debe ser capaz de ejecutar cualquier clase que cumpla con la especificación.

Existen varias versiones, en orden cronológico, de la máquina virtual de Java. En general la definición del Java bytecode no cambia significativamente entre versiones, y si lo hace, los desarrolladores del lenguaje procuran que exista compatibilidad hacia atrás con los productos anteriores.

A partir de J2SE 5.0, los cambios en la especificación de la JVM han sido desarrollados bajo el auspicio de la Java Community Process (JCP) y especificada en la JSR 924.[1]​ Desde el año 2006, cambios en la especificación para soportar las modificaciones del formato del fichero de clases (JSR 202[2]​) se están llevando a cabo en una versión de mantenimiento en la JSR 924. Las especificaciones para la JVM están publicadas en lo que se conoce como "el libro azul".[3]​ Así reza el prefacio: Esperamos que esta especificación documente suficientemente la Máquina Virtual de Java para hacer posibles implementaciones desde cero. Sun proporciona tests que verifican que las implementaciones de la Máquina Virtual de Java opere correctamente

Kaffe es un ejemplo de una implementación 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. Sun fue adquirida en el año 2010 por Oracle Corporation.

Entorno de ejecución

Para poder ejecutar una aplicación en una Máquina Virtual de Java, el programa código debe compilarse de acuerdo a un formato binario portable estandarizado, normalmente en forma de ficheros con extensión .class. Un programa puede componerse de múltiples clases, en cuyo caso cada clase tendrá asociado su propio archivo .class. Para facilitar la distribución 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 ejecución, lo que suponía una sobrecarga considerable para la red en una época donde la velocidad suponía un problema. El empaquetado evita la sobrecarga por la continua apertura y cierre de conexiones para cada uno de los fragmentos necesarios.

El código resultante de la compilación es ejecutado por la JVM que lleva a cabo la emulación del conjunto de instrucciones, bien por un proceso de interpretación o más habitualmente mediante un compilador JIT (Just In Time), como el HotSpot de Sun. Esta última opción convierte el bytecode a código nativo de la plataforma destino, lo que permite una ejecución mucho más rápida. El inconveniente es el tiempo necesario al principio para la compilación.

En un sentido amplio, la Máquina Virtual de Java actúa como un puente entre el resultado de la compilación (el bytecode) y el sistema sobre el que se ejecuta la aplicación. Para cada dispositivo debe haber una JVM específica, ya sea un teléfono móvil, un PC con Windows XP o un microondas. En cualquier caso, cada máquina virtual conoce el conjunto de instrucciones de la plataforma destino, y traduce un código escrito en lenguaje Java (común para todas) al código nativo que es capaz de entender el hardware de la plataforma.

El verificador del bytecode

La JVM «verifica» en esto todo bytecode antes de ejecutarlo. Esto significa que solo una cantidad limitada de secuencias de bytecode forman programas válidos; por ejemplo, una instrucción JUMP (branch) puede apuntar solo a una instrucción dentro de la misma función. A causa de esto, el hecho de que JVM es una arquitectura de pila no implica una carga en la velocidad para emulación 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 verificación de código hace a la JVM diferente de una arquitectura clásica de pila cuya emulación eficiente con un compilador JIT es más complicada y típicamente realizado por un intérprete más lento.

La verificación de código también asegura que los patrones de bits arbitrarios no pueden usarse como direcciones. La protección de memoria se consigue sin necesidad de una unidad de Gestión de Memoria (MMU). Así, JVM es una forma eficiente de obtener protección de memoria en chips que no tienen MMU.

Bytecodes

La JVM tiene instrucciones para los siguientes grupos de tareas:

  • Carga y almacenamiento
  • Aritmética
  • Conversión de tipos
  • Creación y manipulación de objetos
  • Gestión de pilas (push y pop)
  • Transferencias de control (branching)
  • Invocación y retorno a métodos
  • Excepciones

La clave es la compatibilidad binaria. Cada sistema operativo de un host particular necesita su propia implementación de JVM y runtime. Estas JVM interpretan el bytecode semánticamente de la misma manera, pero la implementación actual puede variar. Más complicado que solo la emulación de bytecode es la implementación compatible y eficiente de las API Java, las cuales tienen que ser mapeadas para cada sistema operativo de host.

Extensión segura de código remoto

Una arquitectura de máquina virtual permite control de granularidad fina sobre las acciones que el código puede hacer dentro de la máquina. Esto está diseñado para permitir ejecución segura de código no confiable desde fuentes remotas; un modelo usado muy famoso son las Java applets. Applets se ejecutan dentro de una VM incorporada en el navegador del usuario, ejecutando código descargado desde un servidor HTTP remoto. El código remoto se ejecuta en una "sandbox" altamente restringida, la cual está diseñada para proteger al usuario de código erróneo o malicioso. Los publicadores con recursos financieros suficientes pueden conseguir un certificado con el cual hacer applets con firma digital que las caractericen como seguras ("safe"), dándoles 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 máquina virtual

La edición J2SE tiene dos implementaciones de la máquina virtual:

  • Java HotSpot Client VM: La máquina virtual por defecto, preparada para obtener el máximo rendimiento en la ejecución de aplicaciones en el entorno cliente, por ejemplo, reduciendo al máximo el tiempo de inicio de una aplicación Java.
  • Java HotSpot Server VM: Preparada para obtener el máximo rendimiento en la ejecución de aplicaciones en el entorno de los servidores.

Véase también

Referencias

  1. JSR 924 – Especifica cambios a la especificación JVM que se inicia con J2SE 5.0
  2. JSR 202 el 26 de febrero de 2012 en Wayback Machine. – Especifica varios cambios al formato de fichero class
  3. La Especificación de la Máquina Virtual Java

Enlaces externos

  • Kaffe.org - the Kaffe project
  • Java Virtual Machine Descargar
  • JamVM - The Jam Virtual Machine
  • Prueba tu JVM
  • Sitio principal de Sun Microsystems (inglés)
  • Descarga de Java SUN (enlace roto disponible en Internet Archive; véase el historial, la primera versión y la última). (en inglés);
  1. Clarificaciones y Enmiendas a la Especificación de la Máquina Virtual Java, Segunda Edición incluye lista de cambios que hay que realizar para soportar J2SE 5.0 y JSR 45
  2. JSR 45 – Especifica cambios al formato de fichero class para soportar depuración a nivel de fuente de lenguajes tales como JSP y SQLJ que son traducidos a Java
  •   Datos: Q193321

máquina, virtual, java, máquina, virtual, java, inglés, java, virtual, machine, máquina, virtual, proceso, nativo, decir, ejecutable, plataforma, específica, capaz, interpretar, ejecutar, instrucciones, expresadas, código, binario, especial, bytecode, java, cu. Una maquina virtual Java en ingles Java Virtual Machine JVM es una maquina virtual de proceso nativo es decir ejecutable en una plataforma especifica capaz de interpretar y ejecutar instrucciones expresadas en un codigo binario especial el bytecode Java el cual es generado por el compilador del lenguaje Java Esquema de la arquitectura general de un programa en ejecucion en una Maquina Virtual Java El codigo binario de Java no es un lenguaje de alto nivel sino un verdadero codigo maquina de bajo nivel viable incluso como lenguaje de entrada para un microprocesador fisico Como todas las piezas del rompecabezas Java fue desarrollado originalmente por Sun La JVM es una de las piezas fundamentales de la plataforma Java Basicamente se situa en un nivel superior al hardware del sistema sobre el que se pretende ejecutar la aplicacion y este actua como un puente que entiende tanto el bytecode como el sistema sobre el que se pretende ejecutar Asi cuando se escribe una aplicacion Java se hace pensando que sera ejecutada en una maquina virtual Java en concreto siendo esta la que en ultima instancia convierte de codigo bytecode a codigo nativo del dispositivo final La gran ventaja de la maquina virtual java es aportar portabilidad al lenguaje de manera que desde Sun Microsystems se han creado diferentes maquinas virtuales java para diferentes arquitecturas y asi un programa class escrito en Windows puede ser interpretado en un entorno Linux Tan solo es necesario disponer de dicha maquina virtual para dichos entornos De ahi el famoso axioma que sigue a Java escribelo una vez ejecutalo en cualquier parte o Write once run anywhere Pero los intentos de la compania propietaria de Java y productos derivados de construir microprocesadores que aceptaran el Java bytecode como su lenguaje de maquina fueron mas bien infructuosos La maquina virtual de Java puede estar implementada en software hardware una herramienta de desarrollo o un navegador web lee y ejecuta codigo precompilado bytecode que es independiente de la plataforma multiplataforma La JVM provee definiciones para un conjunto de instrucciones un conjunto de registros un formato para archivos de clases la pila un heap con recolector de basura y un area de memoria Cualquier implementacion de la JVM que sea aprobada por SUN debe ser capaz de ejecutar cualquier clase que cumpla con la especificacion Existen varias versiones en orden cronologico de la maquina virtual de Java En general la definicion del Java bytecode no cambia significativamente entre versiones y si lo hace los desarrolladores del lenguaje procuran que exista compatibilidad hacia atras con los productos anteriores A partir de J2SE 5 0 los cambios en la especificacion de la JVM han sido desarrollados bajo el auspicio de la Java Community Process JCP y especificada en la JSR 924 1 Desde el ano 2006 cambios en la especificacion para soportar las modificaciones del formato del fichero de clases JSR 202 2 se estan llevando a cabo en una version de mantenimiento en la JSR 924 Las especificaciones para la JVM estan publicadas en lo que se conoce como el libro azul 3 Asi reza el prefacio Esperamos que esta especificacion documente suficientemente la Maquina Virtual de Java para hacer posibles implementaciones desde cero Sun proporciona tests que verifican que las implementaciones de la Maquina Virtual de Java opere correctamenteKaffe es un ejemplo de una implementacion 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 Sun fue adquirida en el ano 2010 por Oracle Corporation Indice 1 Entorno de ejecucion 1 1 El verificador del bytecode 1 2 Bytecodes 1 3 Extension segura de codigo remoto 2 Implementaciones de la maquina virtual 3 Vease tambien 4 Referencias 5 Enlaces externosEntorno de ejecucion EditarPara poder ejecutar una aplicacion en una Maquina Virtual de Java el programa codigo debe compilarse de acuerdo a un formato binario portable estandarizado normalmente en forma de ficheros con extension class Un programa puede componerse de multiples clases en cuyo caso cada clase tendra asociado su propio archivo class Para facilitar la distribucion de aplicaciones los archivos de clase pueden empaquetarse juntos en un archivo con formato jar Esta idea aparecio en la epoca de los primeros applets de Java Estas aplicaciones pueden descargar aquellos archivos de clase que necesitan en tiempo de ejecucion lo que suponia una sobrecarga considerable para la red en una epoca donde la velocidad suponia un problema El empaquetado evita la sobrecarga por la continua apertura y cierre de conexiones para cada uno de los fragmentos necesarios El codigo resultante de la compilacion es ejecutado por la JVM que lleva a cabo la emulacion del conjunto de instrucciones bien por un proceso de interpretacion o mas habitualmente mediante un compilador JIT Just In Time como el HotSpot de Sun Esta ultima opcion convierte el bytecode a codigo nativo de la plataforma destino lo que permite una ejecucion mucho mas rapida El inconveniente es el tiempo necesario al principio para la compilacion En un sentido amplio la Maquina Virtual de Java actua como un puente entre el resultado de la compilacion el bytecode y el sistema sobre el que se ejecuta la aplicacion Para cada dispositivo debe haber una JVM especifica ya sea un telefono movil un PC con Windows XP o un microondas En cualquier caso cada maquina virtual conoce el conjunto de instrucciones de la plataforma destino y traduce un codigo escrito en lenguaje Java comun para todas al codigo nativo que es capaz de entender el hardware de la plataforma El verificador del bytecode Editar La JVM verifica en esto todo bytecode antes de ejecutarlo Esto significa que solo una cantidad limitada de secuencias de bytecode forman programas validos por ejemplo una instruccion JUMP branch puede apuntar solo a una instruccion dentro de la misma funcion A causa de esto el hecho de que JVM es una arquitectura de pila no implica una carga en la velocidad para emulacion 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 verificacion de codigo hace a la JVM diferente de una arquitectura clasica de pila cuya emulacion eficiente con un compilador JIT es mas complicada y tipicamente realizado por un interprete mas lento La verificacion de codigo tambien asegura que los patrones de bits arbitrarios no pueden usarse como direcciones La proteccion de memoria se consigue sin necesidad de una unidad de Gestion de Memoria MMU Asi JVM es una forma eficiente de obtener proteccion de memoria en chips que no tienen MMU Bytecodes Editar La JVM tiene instrucciones para los siguientes grupos de tareas Carga y almacenamiento Aritmetica Conversion de tipos Creacion y manipulacion de objetos Gestion de pilas push y pop Transferencias de control branching Invocacion y retorno a metodos ExcepcionesLa clave es la compatibilidad binaria Cada sistema operativo de un host particular necesita su propia implementacion de JVM y runtime Estas JVM interpretan el bytecode semanticamente de la misma manera pero la implementacion actual puede variar Mas complicado que solo la emulacion de bytecode es la implementacion compatible y eficiente de las API Java las cuales tienen que ser mapeadas para cada sistema operativo de host Extension segura de codigo remoto Editar Una arquitectura de maquina virtual permite control de granularidad fina sobre las acciones que el codigo puede hacer dentro de la maquina Esto esta disenado para permitir ejecucion segura de codigo no confiable desde fuentes remotas un modelo usado muy famoso son las Java applets Applets se ejecutan dentro de una VM incorporada en el navegador del usuario ejecutando codigo descargado desde un servidor HTTP remoto El codigo remoto se ejecuta en una sandbox altamente restringida la cual esta disenada para proteger al usuario de codigo erroneo o malicioso Los publicadores con recursos financieros suficientes pueden conseguir un certificado con el cual hacer applets con firma digital que las caractericen como seguras safe dandoles 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 maquina virtual EditarLa edicion J2SE tiene dos implementaciones de la maquina virtual Java HotSpot Client VM La maquina virtual por defecto preparada para obtener el maximo rendimiento en la ejecucion de aplicaciones en el entorno cliente por ejemplo reduciendo al maximo el tiempo de inicio de una aplicacion Java Java HotSpot Server VM Preparada para obtener el maximo rendimiento en la ejecucion de aplicaciones en el entorno de los servidores Vease tambien EditarJava Java Community Process Maquina de pila Lenguaje de programacion orientado a pila Procesador JavaReferencias Editar JSR 924 Especifica cambios a la especificacion JVM que se inicia con J2SE 5 0 JSR 202 Archivado el 26 de febrero de 2012 en Wayback Machine Especifica varios cambios al formato de fichero class La Especificacion de la Maquina Virtual JavaEnlaces externos EditarKaffe org the Kaffe project Java Virtual Machine Descargar JamVM The Jam Virtual Machine Una introduccion a la estructura y funcionalidad basica de la Maquina Virtual Java Prueba tu JVM Sitio principal de Sun Microsystems ingles Descarga de Java SUN enlace roto disponible en Internet Archive vease el historial la primera version y la ultima en ingles Clarificaciones y Enmiendas a la Especificacion de la Maquina Virtual Java Segunda Edicion incluye lista de cambios que hay que realizar para soportar J2SE 5 0 y JSR 45 JSR 45 Especifica cambios al formato de fichero class para soportar depuracion a nivel de fuente de lenguajes tales como JSP y SQLJ que son traducidos a Java Datos Q193321Obtenido de https es wikipedia org w index php title Maquina virtual Java amp oldid 133005440, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos