¿Qué es JVM?
Java Virtual Machine (JVM) es un motor que proporciona un entorno de tiempo de ejecución para controlar el código Java o las aplicaciones. Convierte el código de bytes de Java en el lenguaje de las máquinas. JVM es parte de Java Run 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 completa 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 intermedio.
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 se interpreta y se compila al mismo tiempo?
- ¿Por qué Java es lento?
Arquitectura JVM
Ahora, en este tutorial de JVM, entendamos 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 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 las matrices se almacenan en el montón. Esta memoria es común y se comparte en varios subprocesos.
4) Pilas de idiomas JVM
Las pilas de lenguaje Java almacenan variables locales y sus resultados parciales. Cada subproceso tiene su propia pila 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 hilo tiene su registro de PC independiente.
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 que se utiliza para probar hardware, software o sistemas completos. El motor de ejecución de pruebas nunca incluye 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
Las bibliotecas nativas son 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 su programa, se puede usar un bloc de notas para esto.
2) Compilador : para convertir su programa de lenguaje alto en código de máquina nativo
3) Vinculador : para combinar diferentes referencias de 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 : 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 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.
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.cy a3.c, se envían al compilador. Cuya salida son los archivos 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 del enlazador. El vinculador agrupará todos estos archivos y producirá el archivo .exe.
Durante la ejecución del programa, un programa cargador cargará a.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 constan de código BYTE. A diferencia de C, no se realiza ningún enlace .
La máquina virtual Java o la máquina virtual Java residen 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. Esta es la compilación justo a tiempo. Es una de las principales razones por las que Java es comparativamente lento.
NOTA: El compilador JIT o Just-in-time es parte de la máquina virtual Java (JVM). Interpreta parte del código de bytes que tiene una funcionalidad similar al mismo tiempo.
¿Por qué Java es un lenguaje interpretado y compilado?
Los lenguajes de programación se clasifican como- Lenguaje de nivel superior Ej. C ++, Java
- Idiomas de nivel medio Ej. C
- Ex ensamblaje de lenguaje de bajo nivel
- finalmente el nivel más bajo como Lenguaje 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 de máquina.
El compilador de Java convierte el código de 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 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 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
- Vinculación dinámica: a diferencia de C, la vinculación se realiza en tiempo de ejecución, cada vez que el programa se ejecuta 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 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 código de bytes de Java en el lenguaje de las 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 Just-in-time. JIT es 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, la JVM en Java puede ser lenta en ejecución.