Máquina virtual Java (JVM) y su arquitectura

¿Qué es JVM?

JVM es un motor que proporciona un entorno de tiempo de ejecución para controlar el código o las aplicaciones de Java. Convierte bytecode de Java en lenguaje de máquina. JVM es una parte de JRE (Java Run Environment). Significa Java Virtual Machine

  • En otros lenguajes de programación, el compilador produce código de máquina para un sistema en particular. Sin embargo, el compilador Java produce código para una Máquina Virtual conocida como Máquina Virtual Java.
  • En primer lugar, el código Java se cumple en bytecode. Este bytecode se interpreta en diferentes máquinas
  • Entre el sistema host y la fuente Java, Bytecode es un lenguaje intermedio.
  • JVM es responsable de asignar espacio de memoria.

En este tutorial, aprenderá-

 

JVM Architecture

Comprendamos la arquitectura de JVM. Contiene cargador de clases, área de memoria, motor de ejecución, etc.

1) ClassLoader

El cargador de clases es un subsistema utilizado para cargar archivos de clases. Realiza tres funciones principales a saber. Cargando, vinculando e inicializando.

2) Área del método

El Área de método de JVM almacena estructuras de clase como metadatos, el grupo de tiempo de ejecución constante y el código de métodos.

3) Heap

Todos los objetos, sus variables de instancia relacionadas y matrices se almacenan en el montón. Esta memoria es común y se comparte entre múltiples hilos.

4) Pilas de lenguaje JVM

Las pilas de lenguaje Java almacenan variables locales, y son resultados parciales. Cada hilo tiene su propia pila JVM, creada simultáneamente a medida que se crea el hilo. Se crea un nuevo marco cada vez que se invoca un método, y se elimina cuando se completa el proceso de invocación del método.

5) Registros de PC

PC register store almacena la dirección de la instrucción de máquina virtual Java que se está ejecutando actualmente. En Java, cada hilo tiene su registro de PC por separado.

6) Pilas de métodos nativos

Las pilas de métodos nativos mantienen la instrucción del código nativo depende de la biblioteca nativa. Está escrito en otro idioma 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 prueba nunca lleva información sobre el producto probado.

8) Interfaz de método nativo

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

9) Bibliotecas de métodos nativos

Native Libraries es una colección de bibliotecas nativas (C, C ++) que necesita el motor de ejecución.

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

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

1) Editor : para escribir tu programa, se podría usar un bloc de notas para esto

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

3) Enlazador : para combinar la referencia de diferentes archivos de programa en su programa principal.

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

5) Ejecución : la ejecución real del código que maneja su sistema operativo y procesador.

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

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

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

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

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

Todos estos archivos, es decir, a1.c, a2.c y a3.c, se envían al compilador. Cuyo resultado son los archivos de objeto correspondientes que son el código de máquina.

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

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

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

Veamos el proceso para JAVA. En general, tienes dos métodos f1 y f2.

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

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

Java VM o Java Virtual Machine reside en la RAM. Durante la ejecución, con el cargador de clases, los archivos de clase se introducen en la RAM. El código BYTE se verifica por cualquier violación de seguridad.

A continuación, el motor de ejecución convertirá el Bytecode en código de máquina nativo. Esto es justo a tiempo para compilar. Es uno de los motivos principales por los que Java es comparativamente lento.

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

¿Por qué Java es Interpreted and Compiled Language?

Los lenguajes de programación se clasifican como

  • Lenguaje de nivel superior Ej. C ++, Java
  • Idiomas de nivel medio Ej. do
  • Asamblea de Ex de Lenguaje de Bajo Nivel
  • 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 del programa C ++ en código máquina.

El compilador 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 en un nivel a otro lenguaje de programación en el mismo nivel. Ejemplo de conversión del programa Java en 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 se compila tanto como el lenguaje interpretado.

¿Por qué Java es lento?

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

  1. Enlace dinámico: adiferencia de C, el enlace se realiza en tiempo de ejecución, cada vez que el programa se ejecuta en Java.
  2. Intérprete en tiempo de ejecución:la conversión de código de bytes en código de máquina nativo se realiza en tiempo de ejecución en Java, lo que a su vez disminuye la velocidad

Sin embargo, la última versión de Java ha abordado los cuellos de botella de rendimiento en gran medida.

Resumen :

  • JVM o Java Virtual Machine es el motor que impulsa el código Java. Convierte bytecode de Java en lenguaje de máquina.
  • En JVM, el código de Java se compila en bytecode. Este bytecode se interpreta en diferentes máquinas
  • JIT o el compilador Just-In-Time es la parte de Java Virtual Machine (JVM). Se usa para acelerar el tiempo de ejecución
  • En comparación con otras máquinas compiladoras, Java puede tardar en ejecutarse.

 

 

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

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