JVM | ¿Qué es Java Virtual Machine y su arquitectura?
¿Qué es JVM?
Máquina Virtual 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 código de bytes de Java en lenguaje de máquinas. JVM es una 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 de Java.
Así es como funciona 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 de Java, Bytecode es un lenguaje intermediario.
JVM en Java es responsable de asignar espacio de memoria.
En este tutorial de JVM, aprenderá-
- Arquitectura JVM
- Proceso de compilación y ejecución de código de software
- 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 tanto interpretado como compilado?
- ¿Por qué Java es lento?
Arquitectura JVM
Ahora, en este tutorial de JVM, comprendamos la Arquitectura de JVM. La arquitectura JVM en Java contiene cargador de clases, área de memoria, motor de ejecución, etc.
1) cargador de clases
El cargador de clases es un subsistema utilizado para cargar archivos de clases. Realiza tres funciones principales a saber. Carga, vinculación e inicialización.
2) Área de método
El área de métodos de JVM almacena estructuras de clase 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 las matrices se almacenan en el montón. Esta memoria es común y se comparte en varios subprocesos.
4) Pilas de lenguaje JVM
Las pilas del lenguaje Java almacenan variables locales y son resultados parciales. Cada subproceso tiene su propia pila de JVM, creada simultáneamente a medida que se crea el subproceso. 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 subproceso tiene su registro de PC separado.
6) Pilas de métodos nativos
Las pilas de métodos nativos contienen la instrucción del código nativo que 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 pruebas nunca lleva ninguna 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 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 siguiente
1) Redactor
2) Compilador
3) Enlazador
4) Cargador
5) Ejecución – Ejecución real del código que es manejado por su sistema operativo y procesador.
Con estos antecedentes, consulte el siguiente video y aprenda el funcionamiento interno de JVM y la arquitectura de JVM (Java Virtual Machine).
Haga clic aquí si no se puede acceder al video
Proceso de compilación y ejecución de código C
Entender 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. Cuya salida son los archivos de objetos correspondientes que son el código de máquina.
El siguiente paso es integrar todos estos archivos de objetos en un solo archivo .exe con la ayuda del enlazador. El enlazador juntará todos estos archivos y producirá el archivo .exe.
Durante la ejecución del programa, un programa cargador cargará un.exe en la RAM para la ejecución.
Compilación y ejecución de código Java en Java VM
Ahora, en este tutorial de JVM, veamos el proceso para JAVA. En su principal, tiene 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 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 clase se llevan a la RAM. El código BYTE se verifica en busca de violaciones 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 de compilar. Es una de las razones principales por las que Java es comparativamente lento.
¿Por qué Java es un lenguaje tanto interpretado como compilado?
Los lenguajes de programación se clasifican como
- Lenguaje de nivel superior Ej. C++, Java
- Lenguajes de nivel medio Ej. C
- Ensamblaje 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 de 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).
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 de un programa Java a C++
En Java, el generador de código Just In Time convierte el código de bytes en el código de máquina nativo que se encuentra 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
- Enlace dinámico: A diferencia de C, la vinculación se realiza en tiempo de ejecución, cada vez que se ejecuta el programa en Java.
- 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 reduce aún más la velocidad
Sin embargo, la última versión de Java solucionó en gran medida los cuellos de botella de 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áquinas.
- La arquitectura JVM en Java contiene cargador de clases, área de memoria, 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 de 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.
Java
- ¿Qué es un tornillo de máquina?
- ¿Qué es el CNC?
- Java 10 - Apretón de manos local de subprocesos
- ¿Qué es el torneado mecánico?
- ¿Qué es el diseño arquitectónico?
- ¿Qué es un perno de máquina?
- ¿Qué es una máquina giratoria?
- ¿Qué es una máquina expendedora de leche?
- ¿Qué es una máquina perforadora horizontal?
- ¿Qué es una máquina de prensa automática?
- ¿Qué es la atención de máquinas?