¿Cuál es la diferencia entre JVM, JDK, JRE y OpenJDK?

Respuestas:

375

JVM

La máquina virtual Java (JVM) es la máquina virtual que ejecuta los códigos de bytes Java. La JVM no entiende el código fuente de Java; es por eso que necesita compilar sus *.javaarchivos para obtener *.classarchivos que contengan los códigos de bytes que entiende la JVM. También es la entidad que permite que Java sea un "lenguaje portátil" ( escribir una vez, ejecutar en cualquier lugar ). De hecho, hay implementaciones específicas de la JVM para diferentes sistemas (Windows, Linux, macOS, consulte la lista de Wikipedia ), el objetivo es que con los mismos códigos de bytes 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:

Java Runtime Environment (JRE)

El Java Runtime Environment (JRE) proporciona las bibliotecas, la máquina virtual Java y otros componentes para ejecutar applets y aplicaciones escritas en el lenguaje de programación Java. Además, dos tecnologías clave de implementación son parte del JRE: Java Plug-in, que permite que los applets se ejecuten en navegadores populares; y Java Web Start, que implementa aplicaciones independientes en una red. También es la base de las tecnologías en la Plataforma Java 2, Enterprise Edition (J2EE) para el desarrollo y despliegue de software empresarial. El JRE no contiene herramientas y utilidades como compiladores o depuradores para desarrollar applets y aplicaciones.

Kit de desarrollo de Java (JDK)

El JDK es un superconjunto del JRE y contiene todo lo que está en el JRE, además de herramientas como los compiladores y depuradores necesarios para desarrollar applets y aplicaciones.

Tenga en cuenta que Oracle no es el único que proporciona JDK.

OpenJDK

OpenJDK es una implementación de código abierto de JDK y la base para Oracle JDK. Casi no hay diferencia entre Oracle JDK y OpenJDK.

Las diferencias se establecen 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 usa para construir Oracle JDK?

R: Está muy cerca: nuestro proceso de compilación para Oracle JDK lanza compilaciones 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 fiesta como un rasterizador de gráficos, algunos componentes de terceros de código abierto, como Rhino, y algunas partes 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 gravados 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 desambiguar la diferencia entre Oracle JDK y OpenJDK de Oracle: https://blogs.oracle.com/java-platform-group/oracle-jdk-releases-for-java-11- y después

alain.janinm
fuente
@ alain.janinm, ¿elegiría OracleJDK u OpenJDK para su desarrollo?
Pacerier
@Pacerier Estoy acostumbrado a usar OracleJDK en el trabajo, pero no tengo nada en contra de OpenJDK :) En realidad, nunca me he topado con una diferencia concreta que me haga elegir entre ellos. Si prefiere el código abierto y no necesita usar una licencia patentada, elija OpenJDK.
alain.janinm
1
Por favor, dígame si tengo razón sobre lo siguiente: Básicamente, ninguna aplicación Java real se puede ejecutar sin JRE. Por lo tanto, todas las descargas (tal vez excepto algunas cosas exóticas para desarrolladores) contienen JVM y JRE (si no el superconjunto JDK).
Mads Skjern
8
@MadsSkjern Sí, necesita un JRE para ejecutar la aplicación Java. Pero cuando descargas una aplicación Java no viene con el JRE, espera que tengas una instalada en tu computadora.
alain.janinm
92

JVM es la máquina virtual Java: en realidad ejecuta Java ByteCode.

JRE es el Java Runtime Environment: 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 específica de JDK.

hvgotcodes
fuente
3
Probablemente porque no mencionó lo other thingscontenido en una JVM. Qué son ? Respondió el artículo no totalmente esa pregunta - javabeat.net/what-is-the-difference-between-jrejvm-and-jdk
Erran Morad
OpenJDK contiene JVM, que es una de las implementaciones de la especificación JVM. Oracle JDK contiene otra implementación de la especificación JVM
AKh
46

JDK (Kit de desarrollo de Java)

Java Developer Kit contiene 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á dirigido 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 para el 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 (Java Runtime Environment)

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 de Java, debe tener JRE instalado en el sistema

Java Virtual Machine proporciona una forma independiente de plataforma de ejecutar código; Eso significa compilar una vez en cualquier máquina y ejecutarla en cualquier lugar (cualquier máquina).

JVM (máquina virtual Java)

Como todos sabemos cuando compilamos un archivo Java, la salida no es un 'exe' sino un archivo '.class'. El archivo '.class' consta de códigos de bytes de Java que JVM puede entender. Java Virtual Machine interpreta el código de bytes en el código de la 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 llama "virtual" porque proporciona una interfaz de máquina que no depende del sistema operativo subyacente y la arquitectura de hardware de la máquina. Esta independencia del hardware y el sistema operativo es una piedra angular del valor de escribir una vez en cualquier lugar de los programas Java.

Existen diferentes implementaciones de JVM. Estos pueden diferir en aspectos como el rendimiento, la confiabilidad, la velocidad, etc. Estas implementaciones diferirán en aquellas áreas donde la especificación Java no menciona cómo implementar las características, como el funcionamiento del proceso de recolección de basura depende de JVM, la especificación Java no define cualquier forma específica de hacer esto.

usuario25226
fuente
23

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.

El Kit de desarrollo de Java (JDK) es un producto de Oracle Corporation dirigido a desarrolladores de Java. Desde la introducción de Java, ha sido, con mucho, el Kit de desarrollo de software (SDK) de Java más utilizado.

Java Runtime Environment , también se conoce 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á licenciada bajo la Licencia Pública General de GNU (GPL) con una excepción de enlace.

nidhin
fuente
Buena respuesta, pero una aclaración. Otros que Oracle producen JDK, por ejemplo, IBM para AIX y z / OS, HP para HP-UX, etc.
Trent Gray-Donald
16

JVM es la máquina virtual en la que se ejecuta el código Java

JRE es el entorno (bibliotecas estándar y JVM) requerido para ejecutar aplicaciones Java

JDK es el JRE con herramientas de desarrollo y documentación.

OpenJDK es una versión de código abierto del JDK, a diferencia del JDK común propiedad de Oracle

Garrett Hall
fuente
15

JDK (Kit de desarrollo de Java):

  • contiene herramientas necesarias para desarrollar los programas Java.
  • Necesita JDK, si es que desea escribir sus propios programas y compilarlos.
  • JDK está dirigido principalmente para el desarrollo de Java.

JRE (Java Runtime Environment)

Java Runtime Environment contiene JVM, bibliotecas de clases y otros archivos de soporte. JRE está dirigido a la ejecución de archivos Java.

JVM (máquina virtual Java)

La JVM interpreta el código de byte en el código de la 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. Java Virtual Machine proporciona una forma independiente de plataforma de ejecutar código.

UN JEFE
fuente
6

JDK - Compila Java a ByteCode. Consiste en depuradores, compiladores, etc.

javac file.java // Is executed using JDK

JVM : ejecuta el código de bytes. JVM es el que hace que la plataforma java sea independiente. Pero JVM varía para las plataformas.

JRE - JVM junto con las bibliotecas de tiempo de ejecución de Java para ejecutar programas de Java.

bharanitharan
fuente
4

Otro aspecto que vale la pena mencionar:

JDK (kit de desarrollo de Java)

Lo necesitará para fines de desarrollo como sugiere su nombre.

Por ejemplo: una compañía de software tendrá instalado JDK en su computadora porque necesitará desarrollar un nuevo software que también compile y ejecute sus programas Java.

Entonces podemos decir que JDK = JRE + JVM.

JRE (entorno de tiempo de ejecución de Java)

Es necesario para ejecutar programas Java. No puede compilar programas Java con él.

Por ejemplo: un usuario de computadora normal que quiera ejecutar algunos juegos en línea necesitará JRE en su sistema para ejecutar programas Java.

JVM (máquina virtual java)

Como sabrás, ejecuta los bytecodes. Hace que la plataforma Java sea independiente porque ejecuta el .classarchivo que obtienes después de compilar el programa Java, independientemente de si lo haces en Windows, Mac o Linux.

JDK abierto

Bueno, como dije anteriormente. Ahora JDK está hecho por diferentes compañías, una de las cuales es de código abierto y de uso público es OpenJDK, mientras que otras son JRockit JDK de Oracle Corporation o IBM JDK.

Sin embargo, todos pueden parecer iguales para el usuario general.

Conclusión

Si usted es un programador de Java, necesitará JDK en su sistema y este paquete también incluirá JRE y JVM, pero si es un usuario normal al que le gusta jugar juegos en línea, entonces solo necesitará JRE y este paquete no tendrá JDK. .

En otras palabras, JDK es abuelo JRE es padre y JVM es su hijo.

Mrinal
fuente
99
Tu publicación es incorrecta en todo el lugar. JRE (entorno de tiempo de ejecución) contiene la JVM (máquina virtual) y la Biblioteca de clases Java. JDK contiene JRE y un montón de herramientas de programación para desarrolladores. en.wikipedia.org/wiki/JDK en.wikipedia.org/wiki/Java_virtual_machine Responde a mi comentario cuando lo arregles y eliminaré el voto negativo.
nhahtdh
@nhahtdh podemos decir: jdk es un paquete independiente, se puede descargar e instalar por separado. Jre = algunas clases + plugin java + JVM
Prakash Pandey
3

Java es el lenguaje e incluye una sintaxis estricta y fuertemente tipada con la que ya debería estar muy familiarizado.

Java 2 Platform, Standard Edition, también conocida como J2SE, se refirió a la plataforma e incluyó las clases en los paquetes java.lang y java.io, entre otros. Fue el bloque de construcción sobre el que se construyeron las aplicaciones Java.

Una máquina virtual Java, o JVM, es una máquina virtual de software que ejecuta código Java compilado. Como el código Java compilado es simplemente bytecode, la JVM es responsable de compilar ese bytecode en el código de máquina antes de ejecutarlo. (Esto a menudo se denomina compilador Just In Time o compilador JIT). La JVM también se encarga de la administración de la memoria para que el código de la aplicación no tenga que hacerlo.

El Java Development Kit, o JDK, fue y sigue siendo la pieza de software que los desarrolladores de Java usan para crear aplicaciones Java. Contiene un compilador de lenguaje Java, un generador de documentación, herramientas para trabajar con código nativo y (típicamente) el código fuente de Java para la plataforma para habilitar clases de plataforma de depuración.

El Java Runtime Environment, o JRE, fue y sigue siendo la pieza de software que los usuarios finales descargan para ejecutar aplicaciones Java compiladas. Incluye una JVM pero no contiene ninguna de las herramientas de desarrollo incluidas en el JDK. El JDK, sin embargo, contiene un JRE.

Koray Tugay
fuente
3

JVM: una especificación que describe la forma / recursos para ejecutar un programa java. Realmente ejecuta el código de bytes y hace que la plataforma Java sea independiente. Al hacerlo, es diferente para una plataforma diferente. JVM para Windows no puede funcionar como JVM para UNIX.

JRE: Implementación de JVM. (JVM + bibliotecas de tiempo de ejecución)

JDK: compilador Java JRE + y otras herramientas esenciales para construir un programa Java desde cero

usuario2807418
fuente
2

JVM : esto en realidad significa el intérprete de código de bytes. Depende de la plataforma. Por ejemplo: en la plataforma Windows, el proceso ' java.exe ' o ' javaw.exe ' es el proceso jvm.

JDK : es un kit de herramientas que contiene las bibliotecas y utilidades necesarias para desarrollar y ejecutar el programa / aplicación java

JRE : es el entorno de ejecución para una aplicación java.ie, solo admite dependencias de tiempo de ejecución, incluido jvm para el programa compilado. Si queremos compilar un programa Java necesitamos jdk.

Tom Sebastian
fuente
2

JVM: máquina virtual de java. le dice a la máquina qué hacer con el código Java. No puede descargar JVM como está. Viene empaquetado en algún otro componente.

JRE: algún otro componente mencionado anteriormente es el JRE. Es JVM + otros frascos para crear un entorno de tiempo de ejecución

JDK: contiene JRE (que a su vez contiene JVM). Una vez que obtenga JDK, no necesita instalar JRE y JVM por separado. Contiene un compilador que compila sus archivos .java en archivos .class

Jain
fuente
2

JVM

JVM (Java Virtual Machine) es una máquina abstracta. Es una especificación que proporciona un entorno de tiempo de ejecución en el que se puede ejecutar el bytecode de Java. Las JVM están disponibles para muchas plataformas de hardware y software.

JRE

JRE es un acrónimo de Java Runtime Environment. Se utiliza para proporcionar un entorno de tiempo de ejecución. Es la implementación de JVM. Existe físicamente. Contiene un conjunto de bibliotecas + otros archivos que JVM utiliza en tiempo de ejecución.

JDK

JDK es un acrónimo de Java Development Kit. Existe físicamente. Contiene herramientas de desarrollo JRE +.

Enlace: - http://www.javatpoint.com/difference-between-jdk-jre-and-jvm

Nikhil Kumar
fuente
1

En resumen:

  • JRE = JVM + Paquetes Java (como util, math, lang, awt, swing, etc.) + bibliotecas de tiempo de ejecución
  • JDK = JRE + Herramientas de desarrollo / depuración

Si quieres desarrollar en Java, necesitas el JDK, pero si solo quieres ejecutar Java, necesitas el JRE.

Hugo Valenza M
fuente
0

JVM Java Virtual Machine, en realidad ejecuta el código de bytes de Java. Es el bloque de ejecución en la plataforma JAVA. Convierte el bytecode al código de máquina.

JRE Java Runtime Environment, proporciona los requisitos mínimos para ejecutar una aplicación Java; Consiste en la máquina virtual Java (JVM), las clases principales y los archivos de soporte.

JDK Java Development Kit, tiene todas las herramientas para desarrollar su software de aplicación. Es como JRE + JVM

JDK abierto es una implementación gratuita y de código abierto de la Plataforma Java.

Ankur Anandapu
fuente
0

En términos simples: - JDK = JRE + Herramientas de desarrollo / depuración , donde JDK es nuestro paquete completo para trabajar con Java, desde la creación de compilación hasta su ejecución. Por otro lado, JRE es solo la ejecución de código (Código de bytes).

Nota: Ya sea que estemos instalando JDK o JRE, JVM vendría incluido con los paquetes y JVM es la parte donde el compilador JIT convierte el código de bytes en el código específico de la máquina.

Solo lea el artículo sobre JDK, JRE, JVM y JIT

AugustRush
fuente
0

JDK : el paquete completo que necesita para escribir y ejecutar código Java

OpenJDK : una implementación independiente de JDK para hacerlo mucho mejor

JVM : convierte el código Java en bytecode y proporciona las especificaciones que indican cómo se debe compilar, cargar, verificar, verificar errores y ejecutar un código Java

JRE : implementación de la JVM con la que se utilizan algunas bibliotecas Java para ejecutar el programa

dhirwan
fuente
0

JRE ejecuta la aplicación pero JVM lee las instrucciones línea por línea, por lo que es intérprete.

JDK = JRE + Herramientas de desarrollo

JRE = JVM + Clases de biblioteca

KIBOU Hassan
fuente
0

JVM se abrevia como Java Virtual Machine , JVM es el componente principal de la arquitectura java. JVM está escrito en lenguaje de programación C. El compilador de Java produce el código de byte para JVM. JVM leyendo el código de bytes verificando el código de bytes y vinculando el código con la biblioteca.

JRE se abrevia como Java Runtime Environment . Es proporcionar entorno en tiempo de ejecución. Es físicamente existe. Contiene JVM + conjunto de bibliotecas (jar) + otros archivos.

JDK se abrevia como Java Development Kit . Es desarrollar aplicaciones Java. Y también Depuración y monitoreo de aplicaciones java. JDK contiene herramientas de desarrollo JRE + (javac, java)

OpenJDK OpenJDK es una versión de código abierto de sun JDK. Oracle JDK es el JDK oficial de Sun.

Poorna Senani Gamage
fuente