¿Cuál es la diferencia entre JVM, JDK, JRE y OpenJDK?
¿Cuál es la diferencia entre JVM, JDK, JRE y OpenJDK?
JVM
La Máquina Virtual Java (JVM) es la máquina virtual que ejecuta los códigos de bytes de Java. La JVM no comprende el código fuente de Java; es por eso que necesita compilar sus *.java
archivos para obtener *.class
archivos que contengan los códigos de bytes comprendidos por la JVM. También es la entidad que permite que Java sea un "lenguaje portátil" ( escribe una vez, ejecuta en cualquier lugar ). De hecho, existen implementaciones específicas de la JVM para diferentes sistemas (Windows, Linux, macOS, consulte la lista de Wikipedia ), el objetivo es que con los mismos bytecodes todos den los mismos resultados.
JDK y JRE
Para explicar la diferencia entre JDK y JRE lo mejor es leer la documentación de Oracle y consultar el diagrama:
Entorno de ejecución de Java (JRE)
Java Runtime Environment (JRE) proporciona las bibliotecas, la máquina virtual Java y otros componentes para ejecutar subprogramas y aplicaciones escritas en el lenguaje de programación Java. Además, dos tecnologías de implementación clave forman parte del JRE: el complemento Java, que permite que los subprogramas se ejecuten en navegadores populares; y Java Web Start, que implementa aplicaciones independientes a través de una red. También es la base de las tecnologías de la plataforma Java 2, Enterprise Edition (J2EE) para el desarrollo y la implementación de software empresarial. El JRE no contiene herramientas ni utilidades como compiladores o depuradores para desarrollar subprogramas y aplicaciones.
Kit de desarrollo de Java (JDK)
El JDK es un superconjunto del JRE y contiene todo lo que contiene el JRE, además de herramientas como los compiladores y depuradores necesarios para desarrollar subprogramas y aplicaciones.
Tenga en cuenta que Oracle no es el único que proporciona JDK.
AbiertoJDK
OpenJDK es una implementación de código abierto del JDK y la base de Oracle JDK. Casi no hay diferencia entre Oracle JDK y OpenJDK.
Las diferencias se indican en este blog :
P: ¿Cuál es la diferencia entre el código fuente que se encuentra en el repositorio de OpenJDK y el código que utiliza para crear Oracle JDK?
R: Está muy cerca: nuestro proceso de compilación para las versiones de Oracle JDK se basa en OpenJDK 7 agregando solo un par de piezas, como el código de implementación, que incluye la implementación de Oracle del complemento Java y Java WebStart, así como algunos terceros de código cerrado. componentes de terceros como un rasterizador de gráficos, algunos componentes de terceros de código abierto, como Rhino, y algunos fragmentos aquí y allá, como documentación adicional o fuentes de terceros. En el futuro, nuestra intención es abrir el código fuente de todas las piezas de Oracle JDK, excepto aquellas que consideramos características comerciales como JRockit Mission Control (aún no disponible en Oracle JDK), y reemplazar los componentes de terceros sobrecargados con alternativas de código abierto para lograr una paridad más cercana. entre las bases del código.
Actualización para JDK 11
Un artículo de Donald Smith intenta eliminar la ambigüedad entre Oracle JDK y OpenJDK de Oracle: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11-and-later
Como se menciona en los comentarios de @Alan Evangelista, Oracle ha dejado de utilizar Java Web Start en Java SE 9 y lo ha eliminado en Java SE 11.
JVM es la máquina virtual Java; en realidad ejecuta Java ByteCode.
JRE es el entorno de ejecución de Java: contiene una JVM, entre otras cosas, y es lo que necesita para ejecutar un programa Java.
JDK es el kit de desarrollo de Java; es el JRE, pero con javac (que es lo que necesita para compilar el código fuente de Java) y otras herramientas de programación agregadas.
OpenJDK es una implementación JDK específica.
JDK (kit de desarrollo de Java)
Java Developer Kit contiene las herramientas necesarias para desarrollar los programas Java y JRE para ejecutar los programas. Las herramientas incluyen compilador (javac.exe), iniciador de aplicaciones Java (java.exe), Appletviewer, etc.
El compilador convierte el código java en código de bytes. El iniciador de aplicaciones Java abre un JRE, carga la clase e invoca su método principal.
Necesita JDK, si es que desea escribir sus propios programas y compilarlos. Para ejecutar programas java, JRE es suficiente.
JRE está destinado a la ejecución de archivos Java
es decir, JRE = JVM + Clases de paquetes Java (como util, math, lang, awt, swing, etc.) + bibliotecas de tiempo de ejecución.
JDK está dirigido principalmente al desarrollo de Java. Es decir, puede crear un archivo Java (con la ayuda de paquetes Java), compilar un archivo Java y ejecutar un archivo Java.
JRE (entorno de ejecución de Java)
Java Runtime Environment contiene JVM, bibliotecas de clases y otros archivos de soporte. No contiene ninguna herramienta de desarrollo como compilador, depurador, etc. En realidad, JVM ejecuta el programa y utiliza las bibliotecas de clases y otros archivos de soporte proporcionados en JRE. Si desea ejecutar cualquier programa java, necesita tener JRE instalado en el sistema.
La máquina virtual Java proporciona una forma de ejecutar código independiente de la plataforma; Eso significa compilar una vez en cualquier máquina y ejecutarlo en cualquier lugar (cualquier máquina).
JVM (máquina virtual Java)
Como todos sabemos, cuando compilamos un archivo Java, la salida no es un archivo 'exe' sino un archivo '.class'. El archivo '.class' consta de códigos de bytes de Java que JVM puede entender. La máquina virtual Java interpreta el código de bytes en el código de máquina dependiendo del sistema operativo subyacente y la combinación de hardware. Es responsable de todas las cosas, como la recolección de basura, la verificación de los límites de la matriz, etc. JVM depende de la plataforma.
La JVM se denomina "virtual" porque proporciona una interfaz de máquina que no depende del sistema operativo subyacente ni de la arquitectura del hardware de la máquina. Esta independencia del hardware y del sistema operativo es la piedra angular del valor de escribir una sola vez y ejecutar en cualquier lugar de los programas Java.
Hay diferentes implementaciones de JVM. Estos pueden diferir en cosas como rendimiento, confiabilidad, velocidad, etc. Estas implementaciones diferirán en aquellas áreas donde la especificación de Java no menciona cómo implementar las funciones, por ejemplo, cómo funciona el proceso de recolección de basura depende de JVM, la especificación de Java no. Defina cualquier forma específica de hacer esto.
Una máquina virtual Java (JVM) es una máquina virtual que puede ejecutar Java ByteCode. Es el componente de ejecución de código de la plataforma de software Java.
Java Development Kit (JDK) es un producto de Oracle Corporation dirigido a desarrolladores de Java. Desde la introducción de Java, ha sido, con diferencia, el kit de desarrollo de software (SDK) de Java más utilizado.
Java Runtime Environment , también conocido como Java Runtime, Runtime Environment
OpenJDK (Open Java Development Kit) es una implementación gratuita y de código abierto del lenguaje de programación Java. Es el resultado de un esfuerzo que Sun Microsystems comenzó en 2006. La implementación está bajo la Licencia Pública General GNU (GPL) con una excepción de vinculación.