JVM frente a JRE
Java es un lenguaje de programación multiplataforma. También se adhiere al principio de "escribir una vez, ejecutar en cualquier lugar". El compilador de Java puede compilar el programa escrito en Java en código de bytes de Java. Luego, el código de bytes se puede ejecutar en cualquier plataforma que ejecute JRE (Java Runtime Environment). JRE incluye JVM (Java Virtual Machine), bibliotecas base (que implementan la API de Java) y otros archivos de soporte. JVM es una máquina informática abstracta que actúa como mediador entre las plataformas JRE específicas y el código Java.
¿Qué es JVM?
JVM es un tipo de máquina virtual que utilizan las máquinas para ejecutar el código de bytes de Java. Según Sun Microsystems (que desarrolló Java hasta que Oracle lo compró, muy recientemente), hay más de 4 mil millones de dispositivos habilitados para JVM en el mundo. Más específicamente, Java Virtual Machine es una máquina informática abstracta implementada en hardware y sistema operativo estándar. Una de las funcionalidades importantes proporcionadas por la JVM es el manejo automatizado de excepciones. Normalmente, una colección de bibliotecas estándar acompaña a la JVM. De hecho, JRE es un paquete que contiene la JVM y las clases que implementan la API de Java. JVM es un componente muy importante, que se adapta a la naturaleza de "compilar una vez, ejecutar en cualquier lugar" del lenguaje de programación Java. Siempre que la JVM se esté ejecutando, su código Java puede ejecutarse sobre ella, independientemente de la plataforma utilizada en la máquina. Esta es la razón por la que Java se denomina lenguaje multiplataforma o multiplataforma.
¿Qué es JRE?
JRE es el entorno de ejecución en el que se ejecuta el código Java. Por lo general, JRE se compone de JVM, clases base estándar (que implementan la API de Java base) y otros archivos de soporte. El tipo y la estructura de JRE varían según el sistema operativo y la arquitectura de la CPU. Cuando se ejecuta el código Java, el JRE se comunicará con el sistema operativo, que a su vez hablará con los componentes de hardware correspondientes. Tener JRE instalado en su sistema es imprescindible para ejecutar cualquier código Java en su máquina. Sin embargo, JRE no incluye un compilador, un depurador ni ninguna otra herramienta necesaria para el desarrollo de programas Java (como appletviewer y javac). Si necesita desarrollar programas en Java, debe tener el JDK (Java Development Kit), que también incluye el JRE.
¿Cuál es la diferencia entre JVM y JRE?
Aunque, en el uso diario, los términos JVM y JRE se usan indistintamente, tienen sus diferencias. JVM es una máquina virtual que se ejecuta sobre el sistema operativo, mientras que JRE es el entorno de ejecución en tiempo de ejecución. JVM es una parte del JRE. La especificación de JVM actúa como enlace entre la implementación de JRE específica de la plataforma y las bibliotecas estándar de Java. Por lo tanto, JVM es la entidad que proporciona la abstracción de los detalles de implementación interna al programador. Y es responsable de interpretar el bytecode compilado. Sin embargo, JVM necesita las bibliotecas base y otros archivos de soporte para ejecutar el código de bytes de Java. Pero a veces, JRE se identifica simplemente como una implementación de JVM.