JVM: sus componentes y arquitectura

Una de las causas de la popularidad de Java está asociada a su característica de ser multiplataforma. La portabilidad para correr en los diferentes sistemas operativos es gracias a que todos los programas que desarrollamos se llevan a código intermedio (bytecode); y este es interpretado por la Java Virtual Machine (JVM).

Cuando realizamos un programa, los archivos *.java se compilan y convierte en *.class, normalmente en la carpeta /target de nuestro project, y se pueden encapsular dentro de un archivo de extensión *.jar o *.war.

Para desarrollar se emplea la Java Development Kit (JDK) y para ejecutar los .*class encapsulados en jar/war se emplea la Java Runtime Environment (JRE).

La máquina virtual de Java (JVM)

El siguiente gráfico muestra la arquitectura y partes fundamentales de la JVM.

Descripción de cada parte de la JVM

Class loader: Por el cargador de clases inicia todo el proceso, es la parte encargada de leer los *.class, verificar que sean correctos, existen cargadores de clases integrados en la JVM, el Boostrap Class Loader, encargado de cargar las clases esenciales de las plataforma estándar (JSE), el Extension Class Loader, encargado de cargar las extensiones y librerías de clases disponibles en $JAVA_HOME/jre/lib/ext; y por último el System Application Class Loader que carga desde el classpath de la aplicación en ejecución.

Class area: Es una parte de la memoria de la máquina virtual donde se almacena la información de las clases en estructuras, los nombres de los métodos y sus parámetros.

Stack o pila: La pila o stack memory, es una de las partes fundamentales junto al heap, en el stack se almacenan las operaciones en curso, variables, llamadas a funciones, retornos de valores; cada hilo abierto tiene un espacio privado reservado en el stack.

Heap: Es la memoria encargada de almacenar los objetos que se van creando durante la ejecución de un programa.

Register: El registro de PC (contador de programa) contiene la dirección de la instrucción de máquina virtual Java que se está ejecutando actualmente.

Method area: Contiene la información de todos los métodos nativos usados por la aplicación.

Instructions set: Son el conjunto de instrucciones de la máquina virtual desde el bytecode, en estos enlaces hay más detalles sobre el conjunto de instrucciones 1, 2.

Execution engine: Es un procesador virtual que obtiene el flujo de bytecode y con el conjunto de instrucciones el compilador JIT (just in time), ejecuta código de instrucciones similar para mejorar el rendimiento. Ese motor convierte la instrucciones de byte a instrucciones de CPU específicas, en dependencia de la plataforma en particular sobre la que se ejecuta la aplicación.

Native interface: Es un framework que proporciona una interfaz para comunicarse con otras aplicaciones escritas en otro lenguaje como C, C ++, Assembly, etc. Java usa JNI (Java Native Interface) para interactuar con las bibliotecas del sistema operativo (DLL en windows, SO, shared object en Linux, etc).

Espero te haya gustado el artículo, pronto hablaremos del encargado de la limpieza (El recolector de basura de la JVM).

No te pierdas las noticias, inscríbete a nuestro blog para seguir recibiendo nuestros artículos en idioma español y regalanos un café.

4 thoughts on “JVM: sus componentes y arquitectura

Leave a Reply

Your email address will not be published. Required fields are marked *