Entornos de ejecución de Java con jlink
Microsoft reconoce y admite la adopción de entornos de ejecución de Java personalizados diseñados para necesidades específicas de la aplicación, en lugar del uso de entornos de ejecución de Java de uso general. Este método de implementación de Java garantiza que el entorno de ejecución de Java solo contiene las partes de la plataforma Java que realmente necesitan las aplicaciones, por lo que aumenta la seguridad, reduce el tamaño de la implementación y mejora el rendimiento, tanto para las aplicaciones java basadas en la nube como en el servidor, así como en las aplicaciones de escritorio o GUI.
Tradicionalmente, Oracle/Sun Microsystems produciría instaladores de Java Runtime Environment (JRE), que solo contendrán la máquina virtual Java, las API de Java y las integraciones específicas del sistema operativo y del explorador, destinadas a habilitar equipos para ejecutar aplicaciones Java descargadas desde Internet, o para ejecutar aplicaciones Applets y Java Web Start a través del explorador.
Con la llegada de aplicaciones web y exploradores modernos, las tecnologías Applets y Java Web Start han quedado en desuso y los exploradores ya no admiten complementos de Java. La necesidad de un entorno en tiempo de ejecución de Java de uso general preinstalado en los equipos se convirtió en menos significativo durante el tiempo extra. Con Java 9, la API de Applet ha quedado en desuso (vea JEP 289) y con Java 17, la API se marcó para su eliminación, lo que significa que se quitará sin duda en una futura versión de Java.
Otro cambio importante es la modularización de Java, que también se inició con la versión de Java 9 (veaJSR 376). Como parte de este cambio, los desarrolladores ahora pueden usar una línea de comandos recién agregada en el JDK denominada jlink
para generar un entorno de ejecución de Java personalizado diseñado específicamente para adaptarse a las necesidades de las aplicaciones, para implementarse como un entorno de ejecución incrustado integrado junto con el código de la aplicación a menudo como parte de una imagen de contenedor para cargas de trabajo basadas en la nube, o como parte de los instaladores para aplicaciones basadas en GUI.
En la actualidad, Minecraft: Java Edition se implementa en millones de jugadores de Minecraft con un tiempo de ejecución de Java personalizado insertado en el juego. Detrás de servicios en línea, como LinkedIn, Yammer, Bing y Azure, Microsoft también implementa cientos de miles de JVM mediante esta técnica.
Creación de un runtime de Java personalizado
Para crear un entorno de ejecución de Java, debe tener JDK 9 o posterior instalado en el entorno. Descargar y instalar Microsoft Build of OpenJDK primero.
Identificación de los módulos necesarios con jdeps
La plataforma Java ahora está segmentada en módulos. Vea la documentación de Java 17 para obtener una lista completa; otras versiones de Java pueden incluir nuevos módulos.
La herramienta JDK jdeps
se puede usar para analizar un archivo de .class
, un directorio o un archivo JAR
, para identificar las dependencias del módulo Java, las dependencias internas de JDK y otra información útil que ayudará a los desarrolladores a generar entornos de ejecución de Java.
$ cat HelloWorld.java
public class HelloWorld {
public static void main(String args[]) {
System.out.println("Hello World!");
}
}
$ jdeps HelloWorld.class
HelloWorld.class -> java.base
<unnamed> -> java.io java.base
<unnamed> -> java.lang java.base
La herramienta jdeps
indica que esta clase solo depende de los tipos de los paquetes java.lang
y java.io
, por lo que solo necesita el módulo java.base
. Se produciría una salida similar para un archivo JAR
como entrada. Con una lista de los módulos necesarios, ahora puede crear un entorno de ejecución de Java.
Creación de un entorno de ejecución de Java con jlink
Para crear un entorno de ejecución de Java desde el JDK, debe saber qué módulos desea. Use jdeps
para identificarlos. Para obtener más información sobre la herramienta de línea de comandos jlink
, vea la documentación.
Ejemplo:
$ jlink \
--add-modules java.base \
--strip-debug \
--no-man-pages \
--no-header-files \
--compress=2 \
--output /javaruntime
Ahora puede usar el entorno de ejecución de Java ubicado en /javaruntime
para ejecutar el código de la aplicación que depende de java.base
módulo. La estructura de la carpeta javaruntime
generada por jlink
es similar a la estructura del directorio JDK y la herramienta de línea de comandos java
para iniciar la JVM, se encuentra en la carpeta ./bin/
como de costumbre. Dado que un entorno de ejecución de Java personalizado contiene todos los módulos necesarios de una aplicación existente, se puede hacer referencia a él mediante JAVA_HOME
.
$ /javaruntime/bin/java HelloWorld
Hello, World!
En el ejemplo anterior, el entorno de ejecución de Java generado en Windows consume aproximadamente 24 MB en Windows.
Creación de un entorno de ejecución de Java con una imagen de contenedor de Docker
Puede usar compilaciones de varias fases de Docker para crear, consumir y empaquetar el entorno de ejecución de Java personalizado como parte de la compilación de imágenes. Vea cómo crear entornos de ejecución de Java mediante Docker.
Base de conocimiento
javax.net.ssl.SSLHandshakeException: Alerta irrecuperable recibida: handshake_failure
Visite Java Security and Cryptography para obtener una explicación sobre cómo corregir este problema.
Recursos
Proporcionar comentarios sobre Microsoft Build de OpenJDK
Envíenos sus comentarios, pensamientos e ideas para ayudarnos a mejorar Microsoft Build de OpenJDK. Visite nuestra página de discusiones de OpenJDK en GitHub para enviarnos sus comentarios.
Java y OpenJDK son marcas comerciales o marcas registradas de Oracle o sus filiales.