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

Respuestas:

1225

El JRE es el Java Runtime Environment . Es un paquete de todo lo necesario para ejecutar un programa Java compilado, incluida la máquina virtual Java (JVM), la biblioteca de clases Java, el javacomando y otra infraestructura. Sin embargo, no se puede usar para crear nuevos programas.

El JDK es el Kit de desarrollo de Java , el SDK completo para Java. Tiene todo lo que tiene el JRE, pero también el compilador ( javac) y las herramientas (como javadocy jdb). Es capaz de crear y compilar programas.

Por lo general, si solo le importa ejecutar programas Java en la computadora, solo instalará el JRE. Es todo lo que necesitas. Por otro lado, si planea hacer algo de programación Java, debe instalar el JDK en su lugar.

A veces, incluso si no planea hacer ningún desarrollo de Java en una computadora, aún necesita instalar el JDK. Por ejemplo, si está implementando una aplicación web con JSP, técnicamente solo está ejecutando programas Java dentro del servidor de aplicaciones. ¿Por qué necesitarías el JDK entonces? Porque el servidor de aplicaciones convertirá JSP en servlets Java y necesita usar el JDK para compilar los servlets. Estoy seguro de que hay más ejemplos.

Pablo Santa Cruz
fuente
44
Luego, cuando estamos usando frascos externos, estamos implementando esos frascos en jre / lib / ext / .. Entonces, ¿por qué eso?
i2ijeya
2
Hay algunos frascos diseñados específicamente como extensiones de Java; esos pueden y deben colocarse en lib / ext. Pero poner cualquier tarro de aplicación antiguo no es para lo que está destinado este directorio; Es un abuso del mecanismo de extensión y puede causar problemas más adelante.
Carl Smotricz
He trabajado en la API de JExcel y he configurado la ruta de clase correctamente y todavía existe el problema. Así que lo implementé dentro de la carpeta tlib / ext, que funciona bien después de eso. Entonces, ¿cuál sería la razón?
i2ijeya
3
No tengo información para estar completamente seguro, pero supongo que realmente no configuró correctamente el classpath o configuró el classpath para un cargador de clases diferente al que terminó usando su código. Lo que hace que lib / ext sea diferente de la extensión classpath es que lib / ext afectará a cualquier aplicación Java que use ese JRE particular: es más infalible que configurar classpath.
Carl Smotricz
Hace un par de semanas experimenté una falla bastante masiva que se corrigió cambiando mis variables de entorno JAVA_HOME y Path para hacer referencia al JRE en lugar del JDK. ¿En qué caso funcionaría una aplicación usando el JRE y fallaría con el JDK? Supongo que debería abrir una nueva pregunta. Una nota interesante es que a partir de la versión 1.6, el JRE se incluye con la instalación de JDK pero se desempaqueta al mismo nivel que la carpeta JDK, mientras que en la versión 1.5 y anteriores la carpeta JRE está dentro del JDK. Por cierto: buena respuesta!
Jesse Ivy
143

La respuesta anterior (por Pablo) es muy correcta. Esto es solo información adicional.

El JRE es, como su nombre lo indica, un entorno . Básicamente es un montón de directorios con archivos relacionados con Java, a saber:

  • bin/contiene los programas ejecutables de Java. Lo más importante es java(y también para Windows javaw), que lanza la JVM. Hay algunas otras utilidades aquí también, como keytooly policytool.
  • conf/ contiene archivos de configuración editables por el usuario para que jueguen los expertos de Java.
  • lib/tiene una gran cantidad de archivos de soporte: algunos .jars, archivos de configuración, archivos de propiedades, fuentes, traducciones, certs, etc., todos los "recortes" de Java. Lo más importante es modulesun archivo que contiene los .classarchivos de la biblioteca estándar de Java.
  • En cierto nivel, la biblioteca estándar de Java necesita llamar al código nativo. Para este propósito, el JRE contiene algunos .dll(Windows) o .dylib(macOS) o.so archivos (Linux) bajo bin/o lib/con código binario nativo de soporte específico del sistema.

El JDK también es un conjunto de directorios. Es un superconjunto del JRE, con algunas adiciones:

  • bin/se ha ampliado con herramientas de desarrollo. El más importante de ellos es javac; otros incluyen jar, javadocy jshell.
  • jmods/, que contiene archivos JMOD para la biblioteca estándar, se ha agregado. Estos archivos permiten utilizar la biblioteca estándar jlink.
Carl Smotricz
fuente
1
¿Esto significa que puedo configurar mis variables de ruta al JDK y eso es todo?
Brady
3
@ Brady: Sí, eso creo. Eso funciona bien para mí, al menos. Como desarrollador, esencialmente ignoro el JRE. Si hay casos especiales en los que desea específicamente el JRE, no estoy al tanto de ellos.
Carl Smotricz
El JRE solo puede funcionar con código Java compilado, ¿verdad?
SexyBeast
2
@Cupidvogel, dado que no hay un compilador en el JRE, supongo que se podría decir eso. El JRE está ahí para ejecutar código Java (compilado), mientras que el JDK también le brinda las herramientas para desarrollarlo.
Carl Smotricz
1
Entonces, básicamente, JDK incluye un compilador (como Javac) para compilar el código, un JRE (sistema de tiempo de ejecución) para ejecutar el código compilado y otras herramientas destinadas a facilitar la vida del programador en el desarrollo, ¿correcto? Entonces, AFAIU, solo Javac y JRE son las herramientas realmente necesarias aquí. ¿Por qué entonces, muchas veces, las instalaciones de software y las actualizaciones insisten en que un JDK esté presente?
SexyBeast
131

ingrese la descripción de la imagen aquí

JDK es un superconjunto de JRE y contiene todo lo que está en JRE, además de herramientas como los compiladores y depuradores necesarios para desarrollar applets y aplicaciones. JRE proporciona las bibliotecas, la máquina virtual Java (JVM) y otros componentes para ejecutar applets y aplicaciones escritas en el lenguaje de programación Java.

Chinbold Gansukh
fuente
3
Diagrama genial! Estoy un poco confundido porque el comando java se muestra fuera del JRE, lo cual no es correcto. No entiendo por qué hay archivos separados para el comando java cuando se instala el JDK que es idéntico al menos en tamaño. ¿En qué caso funcionaría una aplicación usando el JRE y fallaría con el JDK? Experimenté esto recientemente y probablemente debería retroceder para replicar y llegar al fondo ...
Jesse Ivy
105

En términos simples: JDK es abuelo JRE es padre y JVM es su hijo. [es decir, JDK> JRE> JVM]

JDK = JRE + Herramientas de desarrollo / depuración

JRE = JVM + Clases de paquetes Java (como util, math, lang, awt, swing, etc.) + bibliotecas de tiempo de ejecución.

JVM = Sistema de cargador de clases + área de datos de tiempo de ejecución + Motor de ejecución.

En otras palabras, si eres un programador de Java, necesitarás JDK en tu sistema y este paquete también incluirá JRE y JVM, pero si eres un usuario normal al que le gusta jugar juegos en línea, solo necesitarás JRE y este paquete no tendrá JDK en eso.

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 compila sus archivos * .java para obtener archivos * .class que contienen los códigos de bytes que la JVM puede entender. 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.

Proceso de compilación JIT (Cortesía: documentación de Oracle)

JDK> JRE> JVM

Jaimin Patel
fuente
Cuando dice "compilar" o "compilador", es extremadamente confuso en este contexto al que se refiere: convertir el código fuente de Java en código de bytes de Java o convertir el código de bytes de Java en código de máquina.
OrangeSherbet
¡Agradable! Me gusta la analogía del abuelo, padre e hijo. : D
Emzor
Sí, gracias, es muy fácil entender quién no está muy familiarizado con estos términos.
Jaimin Patel
25

Desde el sitio web oficial de Java ...

JRE (entorno Java Runtime):

  • Es una implementación de Java Virtual Machine * que realmente ejecuta programas Java.
  • Java Runtime Environment es un complemento necesario para ejecutar programas java.
  • El JRE es más pequeño que el JDK, por lo que necesita menos espacio en disco.
  • El JRE se puede descargar / soportar libremente desde https://www.java.com
  • Incluye la JVM, las bibliotecas Core y otros componentes adicionales para ejecutar aplicaciones y applets escritos en Java.

JDK (Kit de desarrollo de Java)

  • Es un paquete de software que puede usar para desarrollar aplicaciones basadas en Java.
  • Java Development Kit es necesario para desarrollar aplicaciones java.
  • El JDK necesita más espacio en disco ya que contiene el JRE junto con varias herramientas de desarrollo.
  • El JDK se puede descargar / soportar libremente desde https://www.oracle.com/technetwork/java/javase/downloads/
  • Incluye el JRE, un conjunto de clases API, un compilador de Java, Webstart y archivos adicionales necesarios para escribir aplicaciones y applets de Java.
Quiero café
fuente
23

Una diferencia desde una perspectiva de depuración:

Para depurar en clases de sistema Java como String y ArrayList, necesita una versión especial de JRE que se compila con "información de depuración". El JRE incluido dentro del JDK proporciona esta información, pero el JRE normal no. JRE regular no incluye esta información para garantizar un mejor rendimiento.

¿Qué es la información de depuración? Aquí hay una explicación rápida tomada de esta publicación de blog :

Los compiladores modernos hacen un trabajo bastante bueno al convertir su código de alto nivel, con sus estructuras de control muy bien marcadas y anidadas y variables escritas arbitrariamente en una gran pila de bits llamada código de máquina (o código de bytes en el caso de Java), cuyo único propósito es para ejecutar lo más rápido posible en la CPU de destino (CPU virtual de su JVM). El código Java se convierte en varias instrucciones de código de máquina. Las variables se colocan por todas partes: en la pila, en registros o completamente optimizadas. Las estructuras y los objetos ni siquiera existen en el código resultante, son simplemente una abstracción que se traduce en compensaciones codificadas en búferes de memoria.

Entonces, ¿cómo sabe un depurador dónde detenerse cuando le pide que se interrumpa en la entrada de alguna función? ¿Cómo logra encontrar qué mostrarle cuando le pregunta por el valor de una variable? La respuesta es: información de depuración.

El compilador genera la información de depuración junto con el código de la máquina. Es una representación de la relación entre el programa ejecutable y el código fuente original. Esta información se codifica en un formato predefinido y se almacena junto con el código de la máquina. Muchos de estos formatos se inventaron a lo largo de los años para diferentes plataformas y archivos ejecutables.

Steve
fuente
9

JVM, JRE, JDK: estos son todos los pilares del lenguaje Java. Cada componente funciona por separado. JDK y JRE existen físicamente, pero JVM es una máquina abstracta que significa que no existe físicamente.

JVM es el subsistema de JDK y JRE que se utiliza para verificar el código intermedio conocido como "bytecode". Primero carga el "archivo de clase" (que tiene la extensión .c) generado por el compilador de Java (javac) a través del cargador de clases del subsistema JVM y la ubicación de memoria clasificada (área de clase, pila, registros de montón y PC) según su uso. Luego verifica todo el código de bytes para asegurarse de que se devuelve en Java y todos los accesos de memoria a la red. El trabajo del intérprete comienza después de eso, donde verifica todo el programa línea por línea. Los resultados finalmente se muestran en la consola / navegador / aplicación a través de JRE (Java Runtime Environment), que son las instalaciones de tiempo de ejecución.

JRE también es un subsistema de JDK que proporciona recursos de tiempo de ejecución como JVM, clases, archivos ejecutables como archivos .jar, etc.

JDK significa Kit de desarrollo de Java. Contiene todos los componentes necesarios utilizados en la programación Java, como clase, método, swing, AWT, paquete, Java (intérprete), javac (compilador), appletviewer (visor de aplicaciones applet), etc. Para concluir, contiene todos los archivos necesarios para el desarrollo aplicaciones, ya sean independientes o basadas en la web.

Kanan J
fuente
8

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

Por lo general, cuando solo le importa ejecutar programas Java en su navegador o computadora, solo instalará JRE. Es todo lo que necesitas. Por otro lado, si planea hacer alguna programación Java, también necesitará JDK.

Nikhil Kumar
fuente
8

JVM, JRE y JDK dependen de la plataforma porque la configuración de cada sistema operativo es diferente. Pero, Java es independiente de la plataforma.

Java Virtual Machine (JVM) es un sistema de tiempo de ejecución que ejecuta bytecode de Java.

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

El JDK incluye las herramientas de desarrollo de línea de comandos JRE plus, como compiladores y depuradores que son necesarios o útiles para desarrollar applets y aplicaciones.

Chintan Patni
fuente
7

Aquí hay una respuesta simple directamente de Oracle http://docs.oracle.com/javase/7/docs/technotes/guides/

Java SE Runtime Environment (JRE)

El JRE proporciona las bibliotecas, la máquina virtual Java y otros componentes necesarios para que pueda ejecutar applets y aplicaciones escritas en el lenguaje de programación Java. Este entorno de tiempo de ejecución se puede redistribuir con aplicaciones para que sean independientes.

Kit de desarrollo Java SE (JDK)

El JDK incluye las herramientas de desarrollo de línea de comandos JRE plus, como compiladores y depuradores que son necesarios o útiles para desarrollar applets y aplicaciones.

Alex
fuente
7

Si desea ejecutar programas Java, pero no desarrollarlos, descargue Java Run-time Environment o JRE. Si desea desarrollarlos, descargue el kit de desarrollo de Java o JDK

JDK

Llamemos a JDK es un kit que incluye lo que esas cosas necesitan para desarrollar y ejecutar aplicaciones Java.

JDK se ofrece como entorno de desarrollo para crear aplicaciones, componentes y applets.

JRE

Contiene todo lo que necesita para ejecutar aplicaciones Java en forma compilada. No necesitas ninguna biblioteca y otras cosas. Todas las cosas que necesitas están compiladas.

JRE no se puede usar para el desarrollo, solo se usa para ejecutar las aplicaciones.

nifCody
fuente
6

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.

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 es un acrónimo de Java Development Kit, existe físicamente y contiene herramientas de desarrollo JRE +.

Pruthvi Kumar
fuente
6

Si 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, solo necesitará JRE y este paquete no tendrá JDK. .

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. JVM, JRE y JDK dependen de la plataforma porque la configuración de cada sistema operativo es diferente. Pero, Java es independiente de la plataforma.

JRE

Contiene todo lo que necesita para ejecutar aplicaciones Java en forma compilada. No necesitas ninguna biblioteca y otras cosas. Todas las cosas que necesitas están compiladas.

JRE no se puede usar para el desarrollo, solo se usa para ejecutar las aplicaciones.

Kit de desarrollo Java SE (JDK)

El JDK incluye las herramientas de desarrollo de línea de comandos JRE plus, como compiladores y depuradores que son necesarios o útiles para desarrollar applets y aplicaciones.

(Fuentes: Preguntas y respuestas de GeeksForGeeks , Descripción general de la plataforma Java )

Harita M
fuente
Hubo plagio de múltiples sitios (para las secciones JVM y JDK). La próxima vez, cite sus fuentes, no es su trabajo original.
Jonathan Lam
6

Una comprensión clara de estos términos (JVM, JDK, JRE) es esencial para comprender su uso y sus diferencias.

JVM Java Virtual Machine (JVM) es un sistema de tiempo de ejecución que ejecuta el código de bytes de Java. La JVM es como una computadora virtual que puede ejecutar un conjunto de instrucciones compiladas y manipular ubicaciones de memoria. Cuando un compilador de Java compila el código fuente, genera un conjunto de instrucciones altamente optimizado llamado bytecode en un archivo .class. La JVM interpreta estas instrucciones de bytecode y las convierte en código específico de la máquina para su ejecución.

JDK El Kit de desarrollo de Java (JDK) es un entorno de desarrollo de software que puede usar para desarrollar y ejecutar aplicaciones Java. Incluye el JRE y un conjunto de herramientas de programación, como un compilador de Java, un intérprete, un visor de aplicaciones y un visor de documentos. El JDK se implementa a través de las plataformas Java SE, Java EE o Java ME.

JRE El Java Runtime Environment (JRE) es una parte del JDK que incluye una JVM, clases principales y varias bibliotecas que admiten el desarrollo de aplicaciones. Aunque el JRE está disponible como parte del JDK, también puede descargarlo y usarlo por separado.

Para una comprensión completa, puede ver mi Blog: Jdk Jre Jvm y diferencias

Chandra Shekhar Goka
fuente
5

jdk es necesario para compilar en código y convertir código java en códigos de bytes, mientras que jre es necesario para ejecutar los códigos de bytes.

Mayank Jain
fuente
55
@Noy: no solo es muy poca información, sino que tampoco contiene nada que las otras respuestas no contengan.
Amos M. Carpenter
5

JDK incluye las herramientas de desarrollo de línea de comandos JRE plus, como compiladores y depuradores que son necesarios o útiles para desarrollar applets y aplicaciones.

JRE es básicamente la máquina virtual Java donde se ejecutan sus programas Java. También incluye complementos del navegador para la ejecución de Applet.

JDK 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.

Entonces, básicamente JVM <JRE <JDK según @Jaimin Patel dijo.

Dev
fuente
5

Simplemente :

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 y documentación para desarrolladores

ABP
fuente
4

La diferencia entre JDK y JRE es que JDK es el kit de desarrollo de software para Java, mientras que JRE es el lugar donde ejecuta sus programas.

Samarth Shah
fuente
4

supongamos que si usted es un desarrollador, su función es desarrollar el programa y ejecutarlo. por lo tanto, debe tener un entorno para desarrollar y ejecutar, que es proporcionado por JDK.

supongamos que si usted es un cliente, entonces no tiene que preocuparse por el desarrollo. Lo único que necesita es un entorno para ejecutar el programa y obtener solo resultados, que es proporcionado por JRE.

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

JDK = JRE + Herramientas de desarrollo

JRE = JVM + Clases de biblioteca

bishwas pokharel
fuente
2

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 usa en tiempo de ejecución.

La implementación de JVM también es lanzada activamente por otras compañías además de Sun Micro Systems.

ingrese la descripción de la imagen aquí

JDK

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

ingrese la descripción de la imagen aquí

un asesino
fuente
Tanto la información en el texto como los gráficos se han proporcionado en otras respuestas anteriores.
Karl Richter