Java Virtual Machine (JVM), Difference JDK, JRE & JVM – Core Java (Español)
Java es un lenguaje de programación de alto nivel. Un programa escrito en lenguaje de alto nivel no se puede ejecutar en ninguna máquina directamente. Primero, necesita ser traducido a ese lenguaje particular de la máquina. El compilador javac hace esto, toma el programa java (.archivo java que contiene código fuente) y lo traduce en código máquina (referido como código de bytes o .archivo de clase).,
Java Virtual Machine (JVM) es una máquina virtual que reside en la máquina real (su computadora) y el lenguaje de máquina para JVM es el código de bytes. Esto hace que sea más fácil para el compilador, ya que tiene que generar código de bytes para JVM en lugar de código de máquina diferente para cada tipo de máquina. JVM ejecuta el código de bytes generado por el compilador y produce la salida. JVM es la que hace que la plataforma java sea independiente.
entonces, ahora entendemos que la función principal de JVM es ejecutar el código de bytes producido por el compilador., Cada sistema operativo tiene diferentes JVM, sin embargo, la salida que producen después de la ejecución del código de bytes es la misma en todos los sistemas operativos. Lo que significa que el código de bytes generado en Windows se puede ejecutar en Mac OS y viceversa. Es por eso que llamamos a java como lenguaje independiente de la plataforma. Lo mismo se puede ver en el siguiente diagrama:
para resumir todo: la máquina virtual Java (JVM) es la máquina virtual que se ejecuta en la máquina real (su computadora) y ejecuta código de bytes Java., La JVM no entiende el código fuente de Java, por eso necesitamos tener un compilador javac que compile *.archivos java para obtener*.archivos de clase que contienen los códigos de bytes entendidos por la JVM. JVM hace que java sea portable (escribir una vez, ejecutar en cualquier lugar). Cada sistema operativo tiene diferentes JVM, sin embargo, la salida que producen después de la ejecución del código de bytes es la misma en todos los sistemas operativos.
JVM Arquitectura
vamos a ver cómo JVM obras:
Clase de Cargador: El cargador de clase lee el .,archivo de clase y guarde el código de byte en el área de método.
área de método: solo hay un área de método en una JVM que se comparte entre todas las clases. Esto contiene la información de nivel de clase de cada uno .archivo de clase.
Heap: Heap es una parte de la memoria JVM donde se asignan objetos. JVM crea un objeto de clase para cada uno .archivo de clase.
Stack: Stack es también una parte de la memoria JVM, pero a diferencia de Heap, se utiliza para almacenar variables temporales.
registros de PC: esto mantiene la pista de qué instrucción se ha ejecutado y cuál se va a ejecutar., Dado que las instrucciones son ejecutadas por subprocesos, cada subproceso tiene un registro de PC separado.pila de métodos nativos: un método nativo puede acceder a las áreas de datos de tiempo de ejecución de la máquina virtual.
interfaz de método nativo: permite que el código java llame o sea llamado por aplicaciones nativas. Las aplicaciones nativas son programas específicos para el hardware y el sistema operativo de un sistema.
recolección de basura: una instancia de clase es creada explícitamente por el código java y después de su uso es destruida automáticamente por la recolección de basura para la administración de memoria.,
JVM Vs JRE Vs JDK
JRE: JRE es el entorno dentro del cual se ejecuta la máquina virtual java. JRE contiene Java virtual Machine (JVM), bibliotecas de clases y otros archivos, excluyendo herramientas de desarrollo como compilador y depurador.
lo que significa que puede ejecutar el código en JRE pero no puede desarrollar y compilar el código en JRE.
JVM: como hemos comentado anteriormente, JVM ejecuta el programa utilizando clases, bibliotecas y archivos proporcionados por JRE.,
JDK: JDK es un superconjunto de JRE, contiene todo lo que JRE tiene junto con herramientas de desarrollo como compilador, depurador, etc.