¿Qué es el JRE? Introducción al entorno de ejecución de Java

Juntos, Java Development Kit (JDK), Java Virtual Machine (JVM) y Java Runtime Environment (JRE) forman una poderosa trifecta de componentes de la plataforma Java para desarrollar y ejecutar aplicaciones Java. Anteriormente presenté JDK y JVM. En este tutorial rápido, aprenderá sobre JRE, que es el entorno de ejecución de Java.

En términos prácticos, un entorno de ejecución es una pieza de software que está diseñada para ejecutar otro software. Como entorno de ejecución para Java, el JRE contiene las bibliotecas de clases de Java, el cargador de clases de Java y la Máquina virtual de Java. En este sistema:

  • El cargador de clases es responsable de cargar correctamente las clases y conectarlas con las bibliotecas de clases centrales de Java.
  • La JVM es responsable de garantizar que las aplicaciones Java tengan los recursos que necesitan para ejecutarse y funcionar bien en su dispositivo o entorno de nube.
  • El JRE es principalmente un contenedor para esos otros componentes y es responsable de orquestar sus actividades.

Profundizaremos mucho más en cómo estos componentes funcionan juntos en las secciones que siguen.

Instalación de JDK, JRE y JVM

Desde la perspectiva de la instalación, cada vez que descargue un JDK, incluirá un JRE compatible con la versión, y ese JRE incluirá una JVM predeterminada. También puede descargar el JRE por separado del JDK y puede elegir entre una variedad de JVM. Los valores predeterminados funcionan bien para la mayoría de las implementaciones, especialmente cuando comienza con Java.

¿Qué es un entorno de ejecución?

Un programa de software debe ejecutarse y, para ello, necesita un entorno en el que ejecutarse. El entorno de ejecución carga archivos de clase y garantiza que haya acceso a la memoria y otros recursos del sistema para ejecutarlos. En el pasado, la mayoría del software utilizaba el sistema operativo (SO) como entorno de ejecución. El programa se ejecutaba dentro de cualquier computadora en la que estuviera, pero dependía de la configuración del sistema operativo para acceder a los recursos. Los recursos en este caso serían cosas como memoria y archivos de programa y dependencias. El Java Runtime Environment cambió todo eso, al menos para los programas Java.

WORA para Java

Cuando se introdujo por primera vez, el principio de "escribir una vez, ejecutar en cualquier lugar" de Java se consideraba revolucionario, pero hoy se ha adoptado como norma para la mayoría de los sistemas de software.

El entorno de ejecución de Java

Podemos ver el software como una serie de capas que se ubican sobre el hardware del sistema. Cada capa proporciona servicios que serán utilizados (y requeridos) por las capas superiores. Java Runtime Environment es una capa de software que se ejecuta sobre el sistema operativo de una computadora y proporciona servicios adicionales específicos de Java.

El JRE suaviza la diversidad de sistemas operativos, lo que garantiza que los programas Java puedan ejecutarse en prácticamente cualquier sistema operativo sin modificaciones. También brinda servicios de valor agregado. La administración automática de memoria es uno de los servicios más importantes de JRE, ya que garantiza que los programadores no tengan que controlar manualmente la asignación y reasignación de memoria.

En resumen, el JRE es una especie de meta-SO para programas Java. Es un ejemplo clásico de abstracción , que abstrae el sistema operativo subyacente en una plataforma coherente para ejecutar aplicaciones Java.

Cómo funciona JRE con JVM

Una máquina virtual Java es un sistema de software en ejecución responsable de ejecutar programas Java en vivo. El JRE es el sistema en disco que toma su código Java, lo combina con las bibliotecas necesarias e inicia la JVM para ejecutarlo.

El JRE contiene bibliotecas y software que sus programas Java necesitan para ejecutarse. Como ejemplo, el cargador de clases de Java es parte del entorno de ejecución de Java. Esta importante pieza de software carga código Java compilado en la memoria y conecta el código a las bibliotecas de clases Java correspondientes.

En la vista en capas que acabo de describir, la JVM es creada por JRE. Desde la perspectiva del paquete, JRE contiene la JVM, como muestra la Figura 1.

Matthew Tyson

Instalación y uso de JRE

Si bien el JRE tiene un lado conceptual, en la práctica del mundo real es solo un software instalado en una computadora, cuyo propósito es ejecutar sus programas Java. Como desarrollador, trabajará principalmente con JDK y JVM, porque esos son los componentes de la plataforma que utiliza para desarrollar y ejecutar sus programas Java. Como usuario de una aplicación Java, estaría más involucrado con el JRE, que le permite ejecutar esos programas.

En la mayoría de los casos, su computadora vendrá con Java instalado y el JRE se incluirá con eso. Si alguna vez necesita instalar o actualizar manualmente, puede descargar la versión actual de JRE de Oracle.

Versiones JRE

Java Runtime Environment se actualiza para cada nueva versión de Java, y sus números de versión se alinean con el sistema de control de versiones de la plataforma Java, por lo que, por ejemplo, JRE 1.8 ejecuta Java 8. Si bien tiene una variedad de paquetes JDK para elegir (como Enterprise Edition o Standard Edition) ese no es el caso con el JRE. La mayoría de las computadoras ejecutan un JRE desarrollado para Java SE, que puede ejecutar cualquier aplicación Java independientemente de cómo se desarrolló. La mayoría de los dispositivos móviles vienen con un JRE para Java ME, que está preinstalado en el dispositivo móvil y no está disponible para descargar.

Una vez que el JRE está instalado, puede interactuar con él en la línea de comandos ingresando  java -version, que le dirá qué versión está instalada. En los sistemas POSIX, siempre puede verificar la ubicación de instalación con which java.

El JRE en devops

El JRE no se nota mucho en la etapa de desarrollo, donde en su mayoría solo ejecuta sus programas en el sistema operativo o IDE de su elección. El JRE juega un papel un poco más prominente en devops y administración de sistemas porque se usa para monitoreo y configuración.

Básicamente, el JRE proporciona los "botones" que usaría para configurar y controlar las características de una aplicación Java. El uso de la memoria es un buen ejemplo, el pan y la mantequilla de la administración de sistemas. Si bien el uso de la memoria siempre es importante, es vital en las configuraciones en la nube y devops es una tecnología basada en la nube. Si está trabajando en un entorno devops o está interesado en diversificarse en devops, es una buena idea comprender cómo funciona la memoria Java y cómo se supervisa en el JRE.

¿Devops o sysadmin?

Devops es un término nuevo, pero describe algo que ha sido cierto durante décadas, que es la interoperabilidad entre desarrollo y operaciones. En este sentido, devops es solo un término más nuevo para lo que solía llamarse administración de operaciones o sistemas. Como sysadmin, un aspecto importante de devops es administrar los sistemas necesarios para ejecutar software. La gestión del JRE es parte de la gestión de sistemas que ejecutan aplicaciones Java.

Memoria Java y JRE

La memoria Java consta de tres componentes: el montón, la pila y el metaespacio (que antes se llamaba permgen).

  • Metaspace es donde Java mantiene la información invariable de su programa, como las definiciones de clases.
  • El espacio de pila es donde Java mantiene contenido variable.
  • El espacio de pila es donde Java almacena la ejecución de funciones y las referencias a variables.

Gestión de memoria en Java 8

Hasta Java 8, el metaespacio se conocía como permgen. Además de ser un nombre mucho más genial, metaspace es un cambio significativo en la forma en que los desarrolladores interactúan con el espacio de memoria de Java. Anteriormente, usaría el comando java -XX:MaxPermSizepara monitorear el tamaño del espacio permgen. Desde Java 8 en adelante, Java aumenta automáticamente el tamaño del metaespacio para adaptarse a las metanecesidades de su programa. Java 8 también introdujo una nueva bandera, MaxMetaspaceSizeque se puede usar para limitar el tamaño del metaespacio.

Las otras opciones de memoria, montón y pila, siguen siendo las mismas en Java 8.

Configurar el espacio de pila

El espacio de pila es la parte más dinámica del sistema de memoria de Java. Puede usar los indicadores -Xmsy -Xmxpara indicarle a Java qué tan grande debe iniciar el montón y qué tan grande permitir que se convierta. Comprender cómo ajustar estos indicadores para las necesidades específicas del programa es un aspecto importante de la gestión de la memoria en Java. Lo ideal es hacer que el montón sea lo suficientemente grande para lograr la recolección de basura más eficiente. Es decir, desea permitir suficiente memoria para que el programa se ejecute, pero no desea que sea más grande de lo necesario.

Configurar el espacio de la pila

El espacio de pila es donde se ponen en cola las llamadas a funciones y las referencias de variables. El espacio de pila es la fuente del segundo error más notorio en la programación Java: la excepción de desbordamiento de pila (la primera es la excepción de puntero nulo). La excepción de desbordamiento de pila indica que se ha quedado sin espacio de pila porque se ha reservado demasiado. Por lo general, obtendrá un desbordamiento de la pila cuando un método o métodos se llaman entre sí de forma circular, lo que dedica un número cada vez mayor de llamadas a funciones a la pila.

Utilice el -Xssconmutador para configurar el tamaño inicial de la pila. Luego, la pila crece dinámicamente de acuerdo con las necesidades del programa.

Monitoreo de aplicaciones Java

Aunque la supervisión de aplicaciones es una función de la JVM, JRE proporciona opciones de configuración, que son la línea de base necesaria para la supervisión. Hay una variedad de herramientas disponibles para monitorear aplicaciones Java, desde las clásicas (como el comando Unix top) hasta sofisticadas soluciones de monitoreo remoto como el monitoreo de infraestructura de Oracle.

Entre estas opciones se encuentran los perfiladores visuales como VisualVM que permiten inspeccionar una JVM en ejecución. Estas herramientas permiten rastrear puntos de acceso y pérdidas de memoria, así como observar el consumo de memoria general en su sistema.

Conclusión

Java Runtime Environment es el programa en disco que carga aplicaciones Java para que las ejecute la JVM. Un JRE se incluye de forma predeterminada cuando descarga el kit de desarrollo de Java, y cada JRE incluye las bibliotecas de clases principales de Java, un cargador de clases de Java y una máquina virtual de Java. Es útil comprender cómo interactúan JVM, JDK y JRE, especialmente para trabajar en entornos de nube y devops. En estos entornos, el JRE desempeña un papel más importante en la supervisión y la configuración que en el desarrollo de aplicaciones Java tradicionales.

Esta historia, "¿Qué es el JRE? Introducción al entorno de ejecución de Java", fue publicada originalmente por JavaWorld.