¿Qué es JVM (máquina virtual Java)? Architectura ¡Explicada!

¿Qué es JVM?

Máquina virtual Java (JVM) es un motor que proporciona un entorno de ejecución para controlar el código Java o las aplicaciones. Convierte el código de bytes de Java en lenguaje de máquina. JVM es parte de Java Runtime Environment (JRE). En otros lenguajes de programación, el compilador produce código de máquina para un sistema en particular. Sin embargo, el compilador de Java produce código para una máquina virtual conocida como máquina virtual Java.

¿Cómo funciona la JVM?

Primero, el código Java se compila en código de bytes. Este código de bytes se interpreta en diferentes máquinas.

Entre el sistema host y la fuente Java, Bytecode es un lenguaje intermediario.

JVM en Java es responsable de asignar espacio de memoria.


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



En este tutorial de JVM, aprenderá:

JVM Architectura

Ahora, en este tutorial de JVM, comprendamos el ArchiTecnología de JVM. JVM archiLa tecnología en Java contiene un cargador de clases, un área de memoria, un motor de ejecución, etc.


JVM Architectura
máquina virtual de Java Architectura


1) Cargador de clases
El cargador de clases es un subsistema que se utiliza para cargar archivos de clases. Realiza tres funciones principales. viz. Carga, vinculación e inicialización.

2) Área del método
El área de métodos JVM almacena estructuras de clases como metadatos, el grupo de tiempo de ejecución constante y el código de los métodos.

3) montón
Todos los Objetos, sus variables de instancia relacionadas y sus matrices se almacenan en el montón. Esta memoria es común y compartida entre varios subprocesos.

4) Pilas de lenguaje JVM
Las pilas del lenguaje Java almacenan variables locales y sus resultados parciales. Cada hilo tiene su propia pila JVM, creada simultáneamente.neously 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
El registro de PC almacena la dirección de la instrucción de la máquina virtual Java que se está ejecutando actualmente. En Java, cada hilo tiene su registro de PC independiente.

6) Pilas de métodos nativos
Las pilas de métodos nativos contienen instrucciones de código nativo que dependen de la biblioteca nativa. Está escrito en otro idioma en lugar de Java.

7) Motor de ejecución
Es un tipo de software que se utiliza para probar hardware, software o sistemas completos. El motor de ejecución de pruebas nunca contiene información sobre el producto probado.

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

9) Bibliotecas de métodos nativos
Bibliotecas nativas 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 siguientewing

1) redactor – Para escribir su programa, se puede usar un bloc de notas para esto

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

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

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

5) Ejecución – Ejecución real del código manejado por su sistema operativo y procesador.

Con estos antecedentes, consulte el siguientewing video y aprenda el funcionamiento interno de JVM y archiTecnología de JVM (Java Virtual Machine).

Haga clic aquí si el video no es accesible

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

Comprender el proceso de compilación de Java en Java. Primero echemos un vistazo rápido al proceso de compilación y vinculación 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.

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

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

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

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

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

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

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

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

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

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

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

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

Ahora, en este tutorial de JVM, veamos el proceso de JAVA. En tu main, 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

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

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

La Java VM o Java Virtual Machine reside en la RAM. Durante la ejecución, utilizando el cargador de clases, los archivos de clases se llevan a la RAM. El código BYTE se verifica para detectar violaciones de seguridad.

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

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

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

NOTA: JIT o El compilador justo a tiempo es parte de la máquina virtual Java (JVM). Interpreta parte del Byte Code que tiene una funcionalidad similar al mismo tiempo.

¿Por qué Java es un lenguaje interpretado y compilado?

Lenguajes de programación se clasifican como

  • Idioma de nivel superior Ej. C + +, Java
  • Idiomas de nivel medio Ej. C
  • Ex lenguaje de bajo nivel Assembly
  • finalmente el nivel más bajo como Lenguaje de Máquina.

A 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 código Java de alto nivel en código de bytes (que también es un tipo de código de máquina).

An Interprete es un programa que convierte un programa en un nivel a otro lenguaje de programación en el mismo nivel. Ejemplo de conversión de un programa Java a C++

En Java, el código justo a tiempo generator convierte el código de bytes en el código de máquina nativo que se encuentran en los mismos niveles de programación.

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

¿Por qué Java es lento?

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

  1. Enlace dinámico: A diferencia de C, la vinculación 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 ralentiza aún más la velocidad.

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

Resumen:

  • La forma completa de JVM es Java Virtual Machine. JVM en Java es el motor que impulsa el código Java. Convierte el código de bytes de Java en lenguaje de máquina.
  • JVM archiLa tecnología en Java contiene un cargador de clases, un área de memoria, un motor de ejecución, etc.
  • En JVM, el código Java se compila en código de bytes. Este código de bytes se interpreta en diferentes máquinas.
  • JIT significa compilador justo a tiempo. 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 compiladoras, JVM en Java puede tener una ejecución lenta.