Questo contenuto non è disponibile nella lingua selezionata.

Chapter 2. Creating a custom Java runtime environment for non-modular applications


You can create a custom Java runtime environment (JRE) from a non-modular application using the jlink tool.

Prerequisites

Procedure

  1. Create a simple Hello World application using Logger class.

    1. You have the base Red Hat build of OpenJDK 11 available in the jdk-11 folder:

      $ ls jdk-11
      bin  conf  demo  include  jmods  legal  lib  man  NEWS  release
      $ ./jdk-11/bin/java -version
      openjdk version "11.0.10" 2021-01-19 LTS
      OpenJDK Runtime Environment 18.9 (build 11.0.10+9-LTS)
      OpenJDK 64-Bit Server VM 18.9 (build 11.0.10+9-LTS, mixed mode)
      Copy to Clipboard Toggle word wrap
    2. Create a directory for your application:

      $ mkdir -p hello-example/sample
      Copy to Clipboard Toggle word wrap
    3. Create hello-example/sample/HelloWorld.java file with the following content:

      package sample;
      
      import java.util.logging.Logger;
      
      public class HelloWorld {
          private static final Logger LOG = Logger.getLogger(HelloWorld.class.getName());
          public static void main(String[] args) {
              LOG.info("Hello World!");
          }
      }
      Copy to Clipboard Toggle word wrap
    4. Compile your application:

      $ ./jdk-11/bin/javac -d . $(find hello-example -name \*.java)
      Copy to Clipboard Toggle word wrap
    5. Run your application without a custom JRE:

      $ ./jdk-11/bin/java sample.HelloWorld
      Mar 09, 2021 10:48:59 AM sample.HelloWorld main
      INFO: Hello World!
      Copy to Clipboard Toggle word wrap

      In this case, the base Red Hat build of OpenJDK takes 311 MB to run a single class.

    6. (Optional) You can inspect the Red Hat build of OpenJDK and see many non-required modules for your application:

      $ du -sh jdk-11/
      313M	jdk-11/
      Copy to Clipboard Toggle word wrap
      $ ./jdk-11/bin/java --list-modules
      java.base@11.0.10
      java.compiler@11.0.10
      java.datatransfer@11.0.10
      java.desktop@11.0.10
      java.instrument@11.0.10
      java.logging@11.0.10
      java.management@11.0.10
      java.management.rmi@11.0.10
      java.naming@11.0.10
      java.net.http@11.0.10
      java.prefs@11.0.10
      java.rmi@11.0.10
      java.scripting@11.0.10
      java.se@11.0.10
      java.security.jgss@11.0.10
      java.security.sasl@11.0.10
      java.smartcardio@11.0.10
      java.sql@11.0.10
      java.sql.rowset@11.0.10
      java.transaction.xa@11.0.10
      java.xml@11.0.10
      java.xml.crypto@11.0.10
      jdk.accessibility@11.0.10
      jdk.aot@11.0.10
      jdk.attach@11.0.10
      jdk.charsets@11.0.10
      jdk.compiler@11.0.10
      jdk.crypto.cryptoki@11.0.10
      jdk.crypto.ec@11.0.10
      jdk.dynalink@11.0.10
      jdk.editpad@11.0.10
      jdk.hotspot.agent@11.0.10
      jdk.httpserver@11.0.10
      jdk.internal.ed@11.0.10
      jdk.internal.jvmstat@11.0.10
      jdk.internal.le@11.0.10
      jdk.internal.opt@11.0.10
      jdk.internal.vm.ci@11.0.10
      jdk.internal.vm.compiler@11.0.10
      jdk.internal.vm.compiler.management@11.0.10
      jdk.jartool@11.0.10
      jdk.javadoc@11.0.10
      jdk.jcmd@11.0.10
      jdk.jconsole@11.0.10
      jdk.jdeps@11.0.10
      jdk.jdi@11.0.10
      jdk.jdwp.agent@11.0.10
      jdk.jfr@11.0.10
      jdk.jlink@11.0.10
      jdk.jshell@11.0.10
      jdk.jsobject@11.0.10
      jdk.jstatd@11.0.10
      jdk.localedata@11.0.10
      jdk.management@11.0.10
      jdk.management.agent@11.0.10
      jdk.management.jfr@11.0.10
      jdk.naming.dns@11.0.10
      jdk.naming.ldap@11.0.10
      jdk.naming.rmi@11.0.10
      jdk.net@11.0.10
      jdk.pack@11.0.10
      jdk.rmic@11.0.10
      jdk.scripting.nashorn@11.0.10
      jdk.scripting.nashorn.shell@11.0.10
      jdk.sctp@11.0.10
      jdk.security.auth@11.0.10
      jdk.security.jgss@11.0.10
      jdk.unsupported@11.0.10
      jdk.unsupported.desktop@11.0.10
      jdk.xml.dom@11.0.10
      jdk.zipfs@11.0.10
      Copy to Clipboard Toggle word wrap

      Sample Hello World application has very few dependencies. You can use jlink to create custom runtime images for your application. These images help you run your application with only required Red Hat build of OpenJDK dependencies.

  2. Determine module dependencies of your application using jdeps command:

    $ ./jdk-11/bin/jdeps -s ./sample/HelloWorld.class
    HelloWorld.class -> java.base
    HelloWorld.class -> java.logging
    Copy to Clipboard Toggle word wrap
  3. Build a custom java runtime image for your application:

    $ ./jdk-11/bin/jlink --add-modules java.base,java.logging --output custom-runtime
    $ du -sh custom-runtime
    50M	custom-runtime/
    $ ./custom-runtime/bin/java --list-modules
    java.base@11.0.10
    java.logging@11.0.10
    Copy to Clipboard Toggle word wrap
    Note

    The size of your custom java runtime image is being reduced to 50M runtime image from 313M runtime image.

  4. You can verify the reduced runtime of your application:

    $ ./custom-runtime/bin/java sample.HelloWorld
    Jan 14, 2021 12:13:26 PM HelloWorld main
    INFO: Hello World!
    Copy to Clipboard Toggle word wrap

    The generated JRE with your sample application does not have any other dependencies.

    You can distribute your application together with your custom runtime for deployment.

Note

Rebuild the custom java runtime images for your application with every security update of your base Red Hat build of OpenJDK.

Torna in cima
Red Hat logoGithubredditYoutubeTwitter

Formazione

Prova, acquista e vendi

Community

Informazioni sulla documentazione di Red Hat

Aiutiamo gli utenti Red Hat a innovarsi e raggiungere i propri obiettivi con i nostri prodotti e servizi grazie a contenuti di cui possono fidarsi. Esplora i nostri ultimi aggiornamenti.

Rendiamo l’open source più inclusivo

Red Hat si impegna a sostituire il linguaggio problematico nel codice, nella documentazione e nelle proprietà web. Per maggiori dettagli, visita il Blog di Red Hat.

Informazioni su Red Hat

Forniamo soluzioni consolidate che rendono più semplice per le aziende lavorare su piattaforme e ambienti diversi, dal datacenter centrale all'edge della rete.

Theme

© 2025 Red Hat