Máquina Virtual de Java

 

En palabras simples, la JVM emula un "Chip Java", el cuál permite ejecutar el conjunto de instrucciones de la máquina Java. Otro elemento importante son las clases base que requieren los programas en Java para ejecutar. Estas residen en el Ambiente de Ejecución (Java Runtime Environment) y son llevados al JVM cuando se necesitan. En la siguiente figura se ilustra cómo están organizadas estas áreas en el ambiente de ejecución.

 

  

 

La JVM fue diseñada para proveer ejecutables en un tipo de plataforma ejecutable estándar. Originalmente fue construida en una sola plataforma - hoy en día varios fabricantes ofrecen distintas construcciones de la JVM, ver enlaces al final - con lo cual sólo puede ofrecer un tipo de aplicaciones compiladas en un código nativo. Los beneficios aparecen en la cantidad de plataformas que ofrecen el ambiente de ejecución Java. Algunas de los ambientes de operación en los que la JVM y el ambiente de ejecución están disponibles hoy son:

 

AS/400

AIX

Amiga

FreeBSD

HP

Linux

Macintosh

MP-RAS

NeXT

OS/2

Solaris

Windows 95

Windows NT

 

Decir que la JVM es un intérprete que convierte el ByteCode compilado de Java en el código de máquina nativo en que debería ejecutarse no es totalmente falso, pero es más correcto decir que es un emulador de la ejecución de un código nativo. La tecnología de máquinas virtuales se ha distinguido de la tecnología de interpretación básicamente por el nivel en que se realiza la interpretación. Los intérpretes trasladan un "código de bit" nativo directamente a llamadas del sistema o instrucciones de máquina, pero la emulación consiste en permitir una arquitectura de máquina intermedia.

 

La arquitectura de la JVM se basa en el concepto de una implementación que no es específica de una máquina. Esto es, la arquitectura misma no asume nada acerca de la máquina o de las características físicas y de construcción sobre la cual es implementada. De esta manera, la JVM es una entidad autónoma e única que ejecuta los archivos de clases. La JVM se separa en cinco unidades de funcionalidad distintas, las que se dedican a la tarea de ejecutar los archivos de clases.

 

 

 

Registers

Stack

Garbage-collection heap

Methods Area

Instruction Set

 

Registros

Para manejar la habilidad de implementar el trabajo en arquitecturas basadas en registros, la JVM define y utiliza los siguientes registros

Registro

Tamaño

Significado

pc

32 bits

Contador de programa, lleva la secuencia de la ejecución del programa (similar al homónimo de las arquitecturas reales)

optop

32 bits

Mantiene una referencia de memoria al tope de la pila

frame

32 bits

Provee un puntero al marco actual de pila

vars

32 bits

Provee el valor de desplazamiento para variables locales en relación al puntero a la pila

 

Pila

La arquitectura trabaja en torno al recurso de pila de 32 bits. La diferencia fundamental del trabajo de este tipo de pila que usa el esquema FIFO de recuperación y almacenamiento es que esta es una pila particionada en tres regiones separadas:

Region de variable local: provee el acceso a las variables locales (en conjunto al registro vars) para acceder a este tipo de elementos. Si las variables ocupan 64 bits, se manejan dos áreas de esta región.

Región de ambiente de ejecución: Usada para proveer código de operación (opcode) para mantener los métodos del marco de pila. También mantiene punteros a variables locales, el marco de pila previo y el inicio y final de la región de operandos.

Región de operandos: Contiene los operandos para el método en ejecución.

 

"Montículo" de Colección de "desperdicios"

Permite una reusabilidad de los recursos que se han ido utilizando, sobre todo las áreas de memoria lo que permite hacer las colocaciones de memoria y la liberación de ésta.

 

Área de almacenamiento de métodos

Como su nombre lo indica ésta área es el dispositivo de almacenamiento de memoria primaria para todos los métodos en ejecución de las distintas clases del programa Java ejecutable. Equivalente a la memoria RAM.

 

Conjunto de Instrucciones de la JVM

Esta no es una región ni un área, sino que corresponde a las instrucciones que maneja la JVM. Como en las arquitecturas reales, el Conjunto de Instrucciones indica al procesador cómo realizar una acción. En la versión 1.1 este consiste en 160 instrucciones separadas en 17 diferentes categorías.

 

Tipos de datos, almacenamiento y operatoria

Una de las regiones en que se divide un archivo ejecutable de Java corresponde al espacio donde se definen los largos de las regiones de datos, constantes de diversos tipos, nombres de clases, nombres de campos y constantes referidas al cuerpo del código. Aquí se agrega una tabla con referencias a valores de tipos:

Tipo

Largo

Referencia

Asciiz

2 bytes

Espacio para caracteres

Unicode

2 bytes

Espacio para caracteres

Integer

4 bytes

Espacio para enteros

Float

4 bytes

Espacio para punto flotante

Long

4 - 4 bytes

4 bytes de la parte alta y 4 de la parte baja

Double

4 - 4 bytes

4 bytes de la parte alta y 4 de la parte baja

Class

2 bytes

Indice a la sección donde está el nombre

String

2 bytes

Maneja la dirección de comienzo del string

Fieldref

2 bytes

Indice a la región de constantes

Methodref

2 bytes

Indice a la región de constantes

InterfaceMethodref

2 bytes

Indice a la región de constantes

NamedType

2 bytes

Indice a la región de constantes

 

 

Protección de la máquina virtual y del procesador real

La protección de la máquina virtual se realiza por medio del verificador de bytecode, el cual intenta asegurar el rechazo de aquellos programas en bytecode que no satisfagan las definiciones asumidas por la optimización de Java, sobre todo en cuanto a direccionamiento.

Asimismo, cuando se trata de proteger el procesador real, el sistema descansa en la posibilidad de traducción hecha directamente por el ambiente de ejecución de Java, donde se obtiene un código nativo bien definido para la máquina.

 

Procesador para Java

Visite la página Sun en la que muestran las especificaciones de picoJava, el procesador para Java.

En este gráfico se aprecia la máquina:

 

Volver a página principal


Desarrollado por Luis Bastías C.

Noviembre 1998.