🇺🇦 Слава Україні! Consulta cómo puedes ayudar a Ucrania desde España u otros países en supportukrainenow.org.

Java

JDK vs JRE: ¿qué diferencia hay?

• Duración: 5:36 • #java #jdk #jre #jvm #oracle #temurin

¿Qué diferencia hay entre el JDK, el JRE y la JVM? En este vídeo te presento la principal diferencia entre el Java Development Kit, el kit de compiladores que usarías para escribir programas Java; el Java Runtime Environment, el kit de programas de ejecución que permiten usar aplicaciones hechas en Java; y la Java Virtual Machine, la máquina virtual que permite correr aplicaciones hechas en Java en un dispositivo.

El JDK y el JRE son dos productos diferentes que tienen que ver con el ecosistema de Java.

El JRE es un entorno de ejecución para Java. Cuando se instala, trae la máquina virtual de Java, entre otras herramientas.

La máquina virtual de Java (o JVM) es el entorno de ejecución que permite ejecutar aplicaciones Java. En otros lenguajes de programación, el resultado del desarrollo se transforma en un ejecutable (por ejemplo, aplicacion.exe), pero este ejecutable sólo funcionará con un sistema operativo y procesador concreto. Sin instalar soluciones raras (como Wine), no se puede sin más ejecutar un .exe en otro sistema operativo. Si acaso, Windows permite ejecutar binarios de 32 bits en un ordenador de 64 bits, pero no es posible ejecutar un programa de 64 bits en un ordenador de 32 bits. Java soluciona este problema compilando el código fuente a un tipo de lenguaje intermedio, denominado bytecode, que es virtual y que no se corresponde con código máquina que pueda ser comprendido por un ordenador real. La máquina virtual de Java es un programa real que se instala en un ordenador concreto y que hace la última traducción entre ese código intermedio y el código máquina que ejecuta el ordenador completo. De este modo, es posible fácilmente llevarse un .jar con un programa Java traducido a bytecode a cualquier otro ordenador que ejecute otro sistema operativo y procesador: mientras haya una máquina virtual de Java que pueda hacer la traducción del bytecode al procesador, se podrá ejecutar.

El JRE solo contiene la máquina virtual de Java y pocas cosas más, porque principalmente está pensado para ejecutar programas ya fabricados de Java. Por ejemplo, si buscas ejecutar una aplicación web hecha en Spring o jugar un rato a Minecraft, te basta con el JRE.

Sin embargo, si buscas desarrollar software vas a necesitar también los compiladores que te permitan transformar código fuente a código máquina bytecode. Y para eso, no basta con el JRE. El JDK, Kit de Desarrollo de Java, es otro bundle que permite instalar herramientas para poder compilar y enlazar código Java, además de otras cosas como generar paquetes de Javadoc o empaquetar archivos JAR. Si vas a programar Java, necesitas obtener un JDK.

Uno de los aspectos más importantes es que el JDK también incorpora una máquina virtual de Java, por lo que si instalas el JDK no necesitas instalar también el JRE. El JDK te proporciona compiladores, enlazadores, empaquetadores, pero también una misma copia de los elementos que trae el JRE. En otras palabras, hoy en día el JRE es un subconjunto reducido de lo que trae el JDK, pensado únicamente para ejecutar programas.

Esto también ha tenido una consecuencia muy interesante en los últimos años. Antiguamente, instalar el JRE era un ritual en servidores y otros entornos de ejecución de Java. Eran los tiempos en los que el JRE se descargaba desde la página web de Oracle, porque el modelo de distribución lo controlaban ellos. Sin embargo, hoy en día, con la apertura del JDK a otros fabricantes, que no hacen más que re-empaquetar el OpenJDK, el JRE como producto se ha convertido en una cosa en peligro de extinción. La mayoría de distribuidores de Java ya no permiten descargar el JRE, porque el JDK ya lo trae, y con el tamaño de los medios de almacenamiento, incluso de los servidores más baratos y austeros, tampoco es un problema instalar compiladores aunque no se vaya a usar. Únicamente Temurin sigue permitiendo descargar desde su sitio web el JRE, si se busca una menor descarga. Tengo una lección hablando de este tema.

¿Qué deberías descargar? Mi sugerencia es que, salvo que estés usando el entorno de ejecución de Temurin, te animes a descargar el JDK en cualquier caso. No pierdes nada y será una descarga más sencilla. Sin embargo, en Windows puede que sea más fácil de obtener el JDK de Temurin porque te permite instalarlo mediante un asistente que además configura las variables de entorno. Tal vez en ese caso, si tengas una razón excepcional, te pueda interesar descargar el JRE para que ocupe menos espacio en disco.

Desplegar transcripción del episodio

¿Qué diferencia hay entre el JDK y el JR? Es lo que te voy a intentar contar en esta pequeña lección de Java. Ambos conceptos están relacionados y tienen que ver con esto que estáis viendo aquí, la JVM. ¿En qué consiste realmente la JVM? Bien, normalmente cuando tú fabricas programas de ordenador, por ejemplo en Visual Studio, lo que haces es generar un ejecutable, por ejemplo con la extensión .exe, que puedes llevarte a cualquier ordenador que utilice el mismo sistema operativo y el mismo procesador. Es decir, un programa hecho para Windows de 64 bits no puedes llevártelo fácilmente a Windows de 32 bits, porque no va a funcionar, porque no hay suficientes bits. Y como tal, salvo que instales algún tipo de ñapa, tú no puedes simplemente llevarte un .exe a Mac, a Linux o a un BSD, hacer doble clic en él y esperar que se abra, porque la arquitectura está pensada para ser usada solamente en Windows. Java nació precisamente para proporcionar una alternativa a este sistema, de tal manera que tú puedas tener una compilación de un programa hecho en Java y llevártelo a cualquier parte, que es lo que se conoce como compila una vez y ejecuta en cualquier parte, el lema que ha tenido Java durante tantos años. Y realmente desde el punto de vista práctico funciona, tú puedes descargarte un JAR y ejecutarlo en tu ordenador, utilices Windows, Mac, Linux, BSD, Solaris o lo que sea que tengas. Si necesitas ayuda para comprender esto puedes imaginarte una analogía con enchufes, por ejemplo este es el cargador de mi teléfono móvil, que me permite cargar cada noche mi teléfono móvil, sin embargo este cargador solo me vale en países que utilicen el mismo conector que el que tiene, por ejemplo donde vivo, pero no me lo puedo llevar por ejemplo a Reino Unido porque usan un sistema de enchufes diferente. En cambio la máquina virtual de Java se guarda un secreto bajo la manga, la máquina virtual de Java es este enchufe que tiene un secreto, y es que con este botón puedo quitar el enchufe y poner otro. Mi programa como tal va a ser la pastilla que no tiene un enchufe tal cual, sino que yo según el país en el que esté voy a comprarle un enchufe u otro enchufe y ese es el que voy a utilizar. Si me voy a Reino Unido por ejemplo utilizaría el conector para enchufarlo a un enchufe de Reino Unido, pero mientras tanto yo utilizaría un enchufe que funcione con mi país. Pues con Java va a pasar algo muy parecido, yo como tal voy a tener mi programa, que es el JAR, pero para poder ejecutarlo voy a necesitar una máquina virtual de Java, que es el programa que sirve para interpretar ese JAR en mi procesador, y la ventaja de ese sistema está en que ese JAR se lo puedo pasar a alguien que utilice otro sistema operativo y va a funcionar bien en su máquina siempre y cuando lo tenga correctamente configurado. Y en ese sentido el JRE es un paquete que contiene la máquina virtual de Java y todo lo que hace falta para poder ejecutar programas en Java. Y de hecho de ahí es donde vienen sus siglas de Java Runtime Environment, o entorno de ejecución de Java, es decir, es el programa que necesitamos para poder ejecutar los programas hechos en Java, es lo que contiene nuestra máquina virtual. Si solamente buscas ejecutar un juego de Java, o buscas ejecutar una aplicación de Java en tu ordenador o en un servidor, el JRE es todo lo que necesitas. Pero si lo que buscas es fabricar aplicaciones en Java, el JRE no te vale, porque necesitas los compiladores y todas las herramientas que hacen falta para poder crear software Java, como por ejemplo lo que te deja comprimir luego tu programa como un archivo JAR que puedas distribuir por Internet. Y en eso es en lo que consiste precisamente el JDK, o Java Development Kit, es decir, Kit de Desarrollo de Java. ¿Y qué es lo que necesitas para fabricar aplicaciones en Java? De modo que, ¿cuál de las dos cosas necesito para poder trabajar? Si solamente buscas ejecutar aplicaciones de Java, puedes utilizar el JRE directamente y acabas antes, pero si buscas desarrollar, necesitas descargar en su lugar el JDK. Tienes suerte porque el JDK dentro también lleva su propia máquina virtual, así que no tienes que instalar los dos, solamente instalas el JDK si vas a programar y si no instalas el JRE. Esto es lo que se lleva diciendo muchos años, excepto que hoy en día no es tan fácil, y es que realmente el JRE es un producto que está en peligro de extinción, ya que no muchos fabricantes siguen distribuyendo un JRE. Por una razón muy simple, dado que el JDK ya te incluye el JRE, bájate directamente el JDK. Por ejemplo, si te tratas de meter en java.com y te descargas Java, lo que te vas a descargar es la versión 8 de Java, que sigue siendo actualizada porque está al día, pero que como tal no es la versión de Java más reciente que existe. Microsoft distribuye su propio OpenJDK. Es decir, tú puedes descargarte una versión del JDK compilada por Microsoft, que está basada en el OpenJDK, así que es completamente válida, pero que como tal solo tiene el JDK, no hay una forma de bajar un JRE desde Microsoft. Solamente Adoptium, si realmente quieres un JRE, te deja descargar en este momento un JRE que pesa muchísimo menos y que contiene solamente las herramientas necesarias para poder ejecutar aplicaciones Java. Si quieres descargar el JRE puedes bajarte desde Adoptium.net, aunque también tengo un vídeo en este canal que te muestra cómo descargar tanto el JDK como el JRE desde la página web de Adoptium por si necesitas un poquito más de ayuda. Pero como tal el JRE es un artefacto que está en peligro de extinción, ya no se suele proporcionar, porque es más fácil descargarte el JDK y así lo tienes todo, y hay que publicar menos cosas en internet. Java ha evolucionado bastante en los últimos años, y hoy en día tiene una arquitectura modular, es decir, es posible tener una versión de Java que solamente tenga un par de módulos y que no pese mucho, lo cual es apropiado por ejemplo para imágenes de Docker o si tienes poco espacio en disco. Por lo que es de esperar que eventualmente el JRE directamente deje de ser necesario, por eso como digo, solamente Adoptium te proporciona un JRE actualizado que puedas utilizar para desplegar en producción o en contenedores de Docker tus propios artefactos de sus en Java. Así que al final del día, si lo único que quieres es jugar juegos, instalar Minecraft por ejemplo, ¿qué deberías instalar? Da igual, instalate el JRE o instalate el JDK, no hay ningún tipo de problema. Si quieres desarrollar, instalate el JDK, no te bajes el JRE. Espero que esta explicación te pueda aclarar algunas dudas, si es así dale al botón me gusta si ayudarás a más personas que tengan tu duda, porque el algoritmo lo mostrará en el buscador. Si todavía necesitas algo de ayuda para instalar Java en tu ordenador, tengo un par de vídeos que te pueden ayudar a hacerlo. Te dejo uno de ellos mostrado aquí arriba para que puedas ir directamente a él. Por mi parte nada más, ten un buen día, nos vemos en próximos vídeos y hasta pronto.