jueves, 16 de mayo de 2013

Qué es la JVM, el JRE y el JDK? Y con qué se come todo eso?

Una vez leí algo como: "Si te preguntan algo y la respuesta solo le servirá a quién te preguntó, dísela. Pero si la respuesta le servirá a muchos, escríbela en un blog y publica el link". Así que aquí estoy con la intención de poder explicar un poco mejor qué significan cada una de estas siglas y poder resolver algunas de las dudas más comunes que tiene la gente que empieza a aprender Java.

A continuación muestro una imagen que tenemos para ilustrar un poco la interacción de algunos componentes de los que hablaremos y su interacción con los componentes del computador.

Esquema conceptual JRE

Como se puede observar en la Figura 01, Cuando hablamos del JRE, hablamos de un componente de software instalado sobre el sistema operativo (que puede ser por ejemplo: Windows, Linux, Solaris, etc.), el mismo que a su vez puede estar instalado en hardware de distintos fabricantes (por ejemplo: Intel, Motorola, etc.).

El JRE, o Java Runtime Environment, como su nombre lo indica es el ambiente de ejecución de aplicaciones Java. Es decir que es el requerimiento mínimo de software que debe tener un equipo para poder ejecutar o correr aplicaciones desarrolladas en Java. Este componente JRE está compuesto básicamente por: La pila de clases Java (las clases que conforman el API) y un componente muy especial llamado Java Virtual Machine.

El API de Java son todas las clases que componen el ambiente de Java y son las clases básicas que al ser utilizadas desde la aplicación podrán ser interpretadas y ejecutadas por la máquina virtual de Java. Un acercamiento a esta pila de clases puede ser encontrado aquí, en la documentación oficial de Java.

Por otra parte, la JVM, o Java Virtual Machine, es justamente un componente de software que actúa como una máquina virtual o un espacio virtual de memoria en donde se ejecutarán las aplicaciones Java. Cada aplicación java ejecutada en un proceso diferente se iniciará en una instancia diferente de la máquina virtual de Java. Y es justamente éste componente el que se encarga de interpretar cada una de las líneas de código "compilado" en Java (bytecode). 

La JVM es la que traducirá cada una de las sentencias del bytecode de Java en sentencias que entienda el sistema operativo y hardware del equipo. Es justamente éste componente el que permite que un código escrito en Java pueda ejecutarse sobre cualquier sistema operativo y hardware, siempre y cuando exista instalada sobre el equipo. De ahí el motivo de que existan tantas versiones del JRE (por lo general una para cada familia de sistemas operativos de 32 y 64 bits). Aquí podrán encontrar las versiones del JRE que actualmente ofrece para descarga el sitio de Oracle.

Muy bien entonces, podemos ver que el JRE es lo que tengo que tener instalado en mi máquina para que pueda ejecutar mis aplicaciones Java (apoyadas en el API de clases y gestionadas en tiempo de ejecución por la JVM). Y, lo más probable es que cualquier equipo que se conecte y navegue por internet ya tenga instalado este componente ya que el mismo, sigue siendo necesario para ejecutar o visualizar correctamente uno que otro sitio de internet.

Entonces, qué es el JDK? El JDK, o Java Development Kit, no es otra cosa que un componente de software que embebe todo lo que posee el JRE pero además de eso, trae las herramientas necesarias para el desarrollo de aplicaciones Java: el compilador, empaquetado de archivos JAR, etc. Aquí podrán encontrar las versiones del JDK que actualmente ofrece para descarga el sitio de Oracle.
En un equipo puede haber varios JDK (de distintas versiones) instalados, y éstos pueden ser utilizados a voluntad siempre y cuando se configure correctamente la herramienta de desarrollo (por ejemplo: Eclipse), sin embargo, el sistema operativo por lo general únicamente poseerá el JRE más nuevo. Es decir que si yo tengo instalado en mi máquina el JDK 1.6 y JDK 1.7, el JRE que utilizará el sistema operativo para ejecutar las aplicaciones en Java general será el JRE 1.7.

Muchas herramientas de desarrollo, contenedores web (por ejemplo: Tomcat) para su ejecución requieren estrictamente un JDK instalado, debido a todas las operaciones de compilación y despliegue que realizan durante su ejecución.

Si les ha parecido interesante la entrada, tienen comentarios, u opiniones acerca de este tema o alguno relacionado, siéntanse en la libertad de comentar. La meta es aprender.




No hay comentarios:

Publicar un comentario