Compartilhar via


Tempos de execução de Java com jlink

A Microsoft reconhece e dá suporte à adoção de runtimes Java personalizados criados para necessidades de aplicativo específicas, em vez do uso de runtimes Java de uso geral. Esse método de implantação java garante que o runtime do Java contenha apenas as partes da plataforma Java que são realmente necessárias pelos aplicativos, aumentando, portanto, a segurança, reduzindo o tamanho da implantação e melhorando o desempenho, tanto para aplicativos Java baseados em nuvem quanto para servidores, bem como para aplicativos de área de trabalho/GUI.

Tradicionalmente, os Microsistemas Oracle/Sun produziriam instaladores do JRE (Java Runtime Environment), que conteriam apenas a Máquina Virtual Java, as APIs Java e as integrações específicas do sistema operacional e do navegador, visando habilitar computadores para executar aplicativos Java baixados da Internet ou para executar aplicativos Applets e Java Web Start por meio do navegador.

Com o advento de aplicativos Web modernos e navegadores, as tecnologias Applets e Java Web Start foram preteridas e os navegadores não dão mais suporte a plug-ins Java. A necessidade de ambientes Java Runtime de uso geral pré-instalados em computadores tornou-se menos significativa ao longo do tempo. Com o Java 9, a API Applet foi preterida (consulte JEP 289) e, com o Java 17, a API ficou marcada para remoção, o que significa que certamente será removida em uma versão futura do Java.

Outra alteração significativa é a modularização do Java, também iniciada com a versão Java 9 (consulte JSR 376). Como parte dessa alteração, os desenvolvedores agora podem usar uma linha de comando recém-adicionada no JDK chamada jlink para produzir um runtime de Java personalizado especificamente projetado para atender às necessidades dos aplicativos, para serem implantados como um runtime incorporado interno, juntamente com o código do aplicativo muitas vezes como parte de uma imagem de contêiner para cargas de trabalho baseadas em nuvem, ou como parte dos instaladores para aplicativos baseados em GUI.

Hoje, Minecraft: Java Edition é distribuído para milhões de jogadores de Minecraft com um ambiente de execução Java personalizado embutido no jogo. Por trás de serviços online como LinkedIn, Yammer, Bing e Azure, a Microsoft também implanta centenas de milhares de JVMs usando essa técnica.

Criar um runtime personalizado do Java

Para criar um runtime do Java, você deve ter o JDK 9 ou posterior instalado em seu ambiente. Baixe e instale o Microsoft Build do OpenJDK primeiro.

Identificar módulos necessários com jdeps

A Plataforma Java agora é segmentada em módulos. Consulte a documentação do Java 17 para obter uma lista completa; outras versões do Java podem incluir novos módulos.

A ferramenta jdeps JDK pode ser usada para analisar um .class arquivo, um diretório ou um JAR arquivo, para identificar dependências de módulo Java, dependências internas do JDK e outras informações úteis que ajudarão os desenvolvedores a produzir runtimes 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

A ferramenta jdeps indica que essa classe depende apenas de tipos nos pacotes java.lang e java.io, portanto, só precisa do módulo java.base. Uma saída semelhante seria produzida para um arquivo JAR como entrada. Com uma lista dos módulos necessários, agora você pode criar um runtime do Java.

Para criar um runtime do Java a partir do JDK, você deve saber quais módulos deseja. Use jdeps para identificá-los. Para obter detalhes sobre a jlink ferramenta de linha de comando, consulte a documentação.

Exemplo:

$ jlink \
         --add-modules java.base \
         --strip-debug \
         --no-man-pages \
         --no-header-files \
         --compress=2 \
         --output /javaruntime

Agora você pode usar o runtime Java localizado em /javaruntime para executar o código do aplicativo dependente do módulo java.base. A estrutura da pasta javaruntime produzida por jlink é semelhante à estrutura do diretório JDK, e a ferramenta de linha de comando java, usada para iniciar a JVM, está localizada na pasta ./bin/, como de costume. Dado que um runtime do Java personalizado contém todos os módulos necessários de um aplicativo existente, ele pode ser referenciado por JAVA_HOME.

$ /javaruntime/bin/java HelloWorld
Hello, World!

No exemplo acima, o runtime do Java produzido no Windows consome cerca de 24 MB no Windows.

Criar um runtime do Java com a imagem de contêiner do Docker

É possível usar builds de vários estágios do Docker para criar, consumir e empacotar o tempo de execução Java personalizado como parte do build de imagem. Veja como criar runtimes Java usando o Docker.

Base de dados de conhecimento

javax.net.ssl.SSLHandshakeException: alerta fatal recebido: handshake_failure

Visite a Segurança e Criptografia java para obter uma explicação sobre como corrigir esse problema.

Recursos

Fornecer comentários sobre o Build do OpenJDK da Microsoft

Envie-nos seus comentários, pensamentos e ideias para nos ajudar a melhorar o Microsoft Build do OpenJDK. Visite nossa página de discussões do OpenJDK no GitHub para nos enviar seus comentários.

Java e OpenJDK são marcas ou marcas registradas da Oracle e/ou de suas afiliadas.