JVM | ¿Qué es la máquina virtual de Java y su arquitectura?

¿Qué es la JVM?

La máquina virtual de Java (JVM) es un motor que proporciona un entorno de tiempo de ejecución para impulsar el código Java o las aplicaciones. Convierte el bytecode de Java en lenguaje de máquinas. La JVM forma parte del entorno de ejecución de Java (JRE). En otros lenguajes de programación, el compilador produce código máquina para un sistema determinado. Sin embargo, el compilador de Java produce código para una máquina virtual conocida como Java Virtual Machine.

Así es como funciona la JVM

En primer lugar, el código Java se compila en bytecode. Este bytecode se interpreta en diferentes máquinas

Entre el sistema anfitrión y la fuente Java, el Bytecode es un lenguaje intermediario.

JVM en Java es responsable de asignar el espacio de memoria.

Cómo funciona la JVM
Funcionamiento de la máquina virtual Java (JVM)

En este tutorial de JVM, aprenderás-

  • Arquitectura de la JVM
  • Compilación de código & Proceso de ejecución
  • Proceso de compilación y ejecución de código C
  • Proceso de compilación y ejecución de código Java
  • ¿Por qué Java es un lenguaje interpretado y compilado?
  • ¿Por qué Java es lento?

Arquitectura de JVM

Ahora en este tutorial de JVM, vamos a entender la Arquitectura de JVM. La arquitectura de la JVM en Java contiene el cargador de clases, el área de memoria, el motor de ejecución, etc.

Arquitectura de la JVM
Arquitectura de la máquina virtual de Java

1) ClassLoader

El cargador de clases es un subsistema utilizado para cargar archivos de clase. Realiza tres funciones principales: carga, enlace e inicialización.

2) Área de Métodos

El Área de Métodos de JVM almacena las estructuras de las clases como los metadatos, el pool de constantes en tiempo de ejecución y el código de los métodos.

3) Heap

Todos los Objetos, sus variables de instancia relacionadas, y las matrices se almacenan en el heap. Esta memoria es común y compartida entre múltiples hilos.

4) Pilas del lenguaje JVM

Las pilas del lenguaje Java almacenan variables locales, y sus resultados parciales. Cada hilo tiene su propia pila JVM, creada simultáneamente al crear el hilo. Se crea una nueva pila cada vez que se invoca un método, y se borra cuando se completa el proceso de invocación del método.

5) Registros PC

El registro PC almacena la dirección de la instrucción de la máquina virtual Java que se está ejecutando en ese momento. En Java, cada hilo tiene su propio registro PC.

6) Pilas de métodos nativos

Las pilas de métodos nativos contienen la instrucción del código nativo depende de la biblioteca nativa. Se escribe en otro lenguaje en lugar de Java.

7) Motor de ejecución

Es un tipo de software utilizado para probar hardware, software o sistemas completos. El motor de ejecución de pruebas nunca lleva ninguna información sobre el producto probado.

8) Interfaz de métodos nativos

La interfaz de métodos nativos es un marco de programación. Permite que el código Java que se ejecuta en una JVM pueda llamar por bibliotecas y aplicaciones nativas.

9) Bibliotecas de Métodos Nativos

Las Bibliotecas Nativas son una colección de las Bibliotecas Nativas(C, C++) que son necesarias para el Motor de Ejecución.

Compilación de código de software & Proceso de ejecución

Para escribir y ejecutar un programa de software, necesitas lo siguiente

1) Editor – Para escribir tu programa en, un bloc de notas podría ser utilizado para esto

2) Compilador – Para convertir su programa de alto lenguaje en código máquina nativo

3) Enlazador – Para combinar diferentes archivos de programa de referencia en su programa principal juntos.

4) Cargador – Para cargar los archivos de su dispositivo de almacenamiento secundario como disco duro, unidad flash, CD en la memoria RAM para la ejecución. La carga se realiza automáticamente cuando se ejecuta el código.

5) Ejecución – Ejecución real del código que es manejado por su OS & procesador.

Con estos antecedentes, consulta el siguiente vídeo & para aprender el funcionamiento interno y la arquitectura de la JVM (Java Virtual Machine).

Pulsa aquí si no se puede acceder al vídeo

Proceso de compilación y ejecución de código C

Para entender el proceso de compilación en Java. Primero echemos un vistazo rápido al proceso de compilación y enlace en C.

Supongamos que en el main, has llamado a dos funciones f1 y f2. La función principal se almacena en el archivo a1.c.

Funcionamiento de la máquina virtual Java(JVM) su arquitectura

La función f1 se almacena en un archivo a2.c

Funcionamiento de la máquina virtual de Java(JVM) su arquitectura

La función f2 se almacena en un archivo a3.c

Funcionamiento de la Máquina Virtual Java(JVM) su Arquitectura

Todos estos archivos, es decir, a1.c, a2.c, y a3.c, se alimentan al compilador. Cuya salida son los correspondientes ficheros objeto que son el código máquina.

Funcionamiento de la máquina virtual Java(JVM) su arquitectura

El siguiente paso es integrar todos estos archivos objeto en un único archivo .exe con la ayuda del enlazador. El enlazador agrupará todos estos archivos y producirá el archivo .exe.

Funcionamiento de la máquina virtual Java(JVM) su arquitectura

Durante la ejecución del programa, un programa cargador cargará un.exe en la RAM para la ejecución.

Funcionamiento de la máquina virtual de Java(JVM) su arquitectura

Compilación y ejecución de código Java en la VM de Java

Ahora en este tutorial de JVM, vamos a ver el proceso para JAVA. En tu main, tienes dos métodos f1 y f2.

  • El método main se guarda en el archivo a1.java
  • f1 se guarda en un archivo como a2.java
  • f2 se guarda en un archivo como a3.java

Funcionamiento de la máquina virtual Java(JVM) su arquitectura

El compilador compilará los tres archivos y produce 3 archivos .class correspondientes que consisten en código BYTE. A diferencia de C, no se realiza ningún enlace.

La Java VM o Máquina Virtual Java reside en la RAM. Durante la ejecución, utilizando el cargador de clases los archivos de clase son llevados a la RAM. El código BYTE es verificado para detectar cualquier brecha de seguridad.

Funcionamiento de la Máquina Virtual Java(JVM) su Arquitectura

A continuación, el motor de ejecución convertirá el Bytecode en código máquina nativo. Esto es la compilación justo a tiempo. Es una de las principales razones por las que Java es comparativamente lento.

Funcionamiento de la Máquina Virtual Java(JVM) su Arquitectura

NOTA: El compilador JIT o Just-in-time es la parte de la Máquina Virtual Java (JVM). Interpreta parte del Código Byte que tiene una funcionalidad similar al mismo tiempo.

¿Por qué Java es tanto un lenguaje interpretado como compilado?

Los lenguajes de programación se clasifican como

  • Lenguaje de alto nivel Ej. C++, Java
  • Lenguajes de nivel medio Ej. C
  • Lenguaje de Bajo Nivel Ej. Ensamblador
  • Finalmente el nivel más bajo como el Lenguaje de Máquina.
  • Un compilador es un programa que convierte un programa de un nivel de lenguaje a otro. Ejemplo de conversión de un programa C++ a código máquina.

    El compilador de java convierte el código java de alto nivel en bytecode (que también es un tipo de código máquina).

    Un intérprete es un programa que convierte un programa de un nivel a otro lenguaje de programación del mismo nivel. Ejemplo de conversión de un programa Java a C++

    En Java, el generador de código Just In Time convierte el bytecode en el código máquina nativo que están en los mismos niveles de programación.

    Por lo tanto, Java es tanto un lenguaje compilado como interpretado.

    ¿Por qué es lento Java?

    Las dos razones principales detrás de la lentitud de Java son

  1. Enlace dinámico: A diferencia de C, el enlazado se realiza en tiempo de ejecución, cada vez que se ejecuta el programa en Java.
  2. Interpretación en tiempo de ejecución: La conversión del código de bytes en código máquina nativo se realiza en tiempo de ejecución en Java, lo que ralentiza aún más la velocidad
  3. Sin embargo, la última versión de Java ha abordado los cuellos de botella de rendimiento en gran medida.

    Resumen:

  • La forma completa de JVM es Java Virtual Machine. JVM en Java es el motor que impulsa el código Java. Convierte el bytecode de Java en lenguaje de máquinas.
  • La arquitectura de la JVM en Java contiene el cargador de clases, el área de memoria, el motor de ejecución, etc.
  • En la JVM, el código Java se compila en bytecode. Este bytecode se interpreta en diferentes máquinas
  • JIT significa Just-in-time compiler. JIT es la parte de la máquina virtual Java (JVM). Se utiliza para acelerar el tiempo de ejecución
  • En comparación con otras máquinas de compilación, JVM en Java puede ser lento en la ejecución.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *