sql >> Databáze >  >> RDS >> Database

Co je to vlastní runtime obrázek v Javě 9?

Java 9 představila myšlenku modulárních runtime obrazů s Project Jigsaw a oficiálně vyřešila problém doručování Java runtime jako monolitické artefakty. Monolitické runtime obrazy byly nejen náročné na využití paměti, ale také snižovaly celkový výkon aplikace, která na nich běží. Nyní můžeme zabalit přizpůsobenou podmnožinu JRE na základě individuálních potřeb aplikací, které na něm běží, a mnohonásobně zvýšit jejich efektivitu. Tento článek se zabývá holistickým pohledem na tuto funkci vlastních runtime obrázků zavedených s Java 9.

Přehled

Dopad myšlenky vytvoření modulárního runtime image s Java 9 je obrovský. Otevírá dveře pro vlastní aplikaci přímo z platformy, na které běží. Platforma Java zvyšuje svou funkčnost s každou novou verzí. Není překvapením, že v určitém okamžiku bude běhové prostředí monolitickým artefaktem a bude mít velkou daň na paměti a výkonu. Kvůli tomu vývojáři dlouho požadovali cestu ven z tohoto problému. Většina programů také nepoužívá platformu Java jako celek. Pokud lze program optimalizovat pro výkon a využití paměti, proč nelze přizpůsobit platformu, na které běží? Java 8 udělala první krok a pokusila se implementovat některé její aspekty pomocí Kompaktních profilů . Java 9 to posunula kupředu a implementovala způsob, jak vytvořit vlastní runtime obrazy bez omezení, které by Kompaktní profily uloženo. Vyžadovalo to holistický přístup k balení runtime obrázků. Samotná platforma je modularizována, aby tuto funkci umožňovala. Aplikační kód zabalený do modulů lze dodat s vlastními runtime obrazy, které obsahují pouze ty moduly platformy, které aplikace používá. Aplikační program tedy může být jediným přibaleným artefaktem, který obsahuje vlastní JRE. To jistě zvyšuje výkon a poskytuje čas spuštění s menšími nároky na paměť. Pokud aplikace běží v cloudu, výrazně snižují přetížení sítě a dobu stahování.

Kompaktní profil

Přestože Java 9 překonala koncept Kompaktního profilu představený s Java 8, je často užitečné pochopit a ocenit dosažený milník. Java 9 se svým způsobem živila myšlenkou a upgradovala koncept Kompaktního profilu holističtějším způsobem.

Kompaktní profil definuje podmnožiny rozhraní API platformy Java SE, které mohou snížit statickou velikost běhového prostředí Java. Tato myšlenka je v podstatě zaměřena na práci na zařízeních s omezenými zdroji, která mají menší úložnou kapacitu, jako je vestavěné zařízení. V zásadě existují tři profily, nazývané kompaktní1 , kompaktní2 a compact3 . Každý profil s vyšším číslem je nadmnožinou svého profilu se sníženým číslem. To znamená, že kompaktní1 je správnou podmnožinou compact2 , kompaktní2 je správnou podmnožinou compact3 a compact3 , je zase správnou podmnožinou plného zásobníku Java 8 SE API.

Reference:

  • Kompaktní profily, dokumentace Java SE 8
  • Přehled kompaktních profilů Java SE Embedded 8
  • Úvod do kompaktních profilů Java 8

Představujeme JIMAGE

JIMAGE je speciální formát souborů zavedený s Java 9 pro ukládání vlastních runtime obrázků. Tento formát souboru je optimalizován pro výkon a úložiště. Formát souboru v podstatě funguje jako kontejner pro prostředky, třídy a moduly JDK a indexuje je pro rychlé vyhledávání a rychlejší načítání tříd. Na rozdíl od jiných formátů souborů, jako jsou JAR a JMOD, vývojáři používají JIMAGE zřídka, protože se týká vnitřních částí JDK, kromě případů, kdy si člověk chce vytvořit vlastní runtime image. Načítání třídy je rychlejší s JIMAGE než JAR nebo JMOD, protože je pro to speciálně optimalizován. JIMAGE lze také použít pouze za běhu. JIMAGE je stále v prvních letech. K dispozici je velmi málo informací pro vývojáře; možná bude později odhaleno více.

Vytváření vlastních obrázků

Java 9 poskytuje jlink nástroj pro vytváření obrazů běhového prostředí pro konkrétní platformu. Vlastní obrázky obsahují moduly specifické pro aplikaci a požadované moduly platformy. Vzhledem k tomu, že velikost obrazu runtime neboli JRE je zmenšena na naprosté minimum, obraz aplikace spolu s JRE je také minimální. Sdružuje JRE jako jedinou jednotku dodávky spolu s programem. jlink nástroj se nachází v /bin adresář JDK9 nainstalovaný adresář. K tomuto nástroji je k dispozici několik možností, které lze použít podle požadavku. Popis lze získat pomocí –help možnost dostupná pomocí jlink příkaz. Zde je pro usnadnění extrahován, nebo můžete zadat jlink –help na příkazovém řádku, abyste získali následující seznam.

Použití:

jlink <options> --module-path <modulepath>
   --add-modules <module>[,<module>...]
Možnost Popis
–add-modules [,…] Kořenové moduly k vyřešení
–bind-services Odkaz v modulech poskytovatele služeb a jejich závislosti

-c, –compress=<0|1|2>

–disable-plugin

–endian

Povolit kompresi zdrojů:

Úroveň 0:Žádná komprese

Úroveň 1:Konstantní sdílení řetězců

Úroveň 2:ZIP

Deaktivujte zmíněný plug-in

Pořadí bajtů vygenerovaného image (výchozí:nativní)

-h, –pomoc

–ignore-signing-information

–launcher =[/]

–limit-modules [,…]

–list-plugins

Vytiskněte tuto zprávu nápovědy

Potlačit závažnou chybu, když jsou v obrazu propojeny podepsané modulární JAR. Soubory podepsaných modulárních JAR související s podpisem se nezkopírují do obrazu runtime.

Přidejte spouštěcí příkaz s daným názvem pro modul a hlavní třídu, pokud je zadán.

Omezte vesmír pozorovatelných modulů.

Seznam dostupných zásuvných modulů.

-p, –cesta-modulu

–no-header-files

–žádné uživatelské stránky

–výstup

–save-opts

Cesta k modulu

Vyloučit zahrnutí záhlaví souborů

Vyloučit manuálové stránky

Umístění výstupní cesty

Uložit možnosti jlink do daného souboru

-G, –strip-debug

–suggest-providers [,…]

Odstraňte informace o ladění

Navrhněte poskytovatele, kteří implementují dané typy služeb z cesty modulu

-v, –verbose

–verze

@

Povolit podrobné trasování

Informace o verzi

Číst možnosti ze souboru

Jednoduchý příklad

Zde si projdeme velmi jednoduchým programem od začátku do konce, jak vytvořit runtime image Java aplikace. Budeme předpokládat, že JDK9 je správně nainstalován a PATH a JAVA_HOME proměnná prostředí jsou vhodně nastaveny. V mém případě je nainstalován a nastaven následovně (na platformě Linux):

  • JDK9 nainstalovaný adresář /usr/lib/jvm/java-9-oracle
  • PATH je nastaveno na /usr/lib/jvm/java-9-oracle/bin
  • JAVA_HOME je nastaven na /usr/lib/jvm/java-9-oracle

Krok 1

Vytvořte adresář s názvem /Home/SampleProject a src adresář v něm (například /Home/SampleProject/src ).

Krok 2

Vytvořte adresář s názvem org.app.test uvnitř src adresář (jako příklad /Home/SampleProject/src/org.app.test ).

Krok 3

Nyní uvnitř org.app.test adresář, vytvořte soubor s názvem module-info.java . A zadejte následující obsah:

module org.app.test{
   requires javafx.controls;
   exports org.app.test;
}

Krok 4

Nyní vytvořte adresář s názvem org, app, test jeden uvnitř druhého (například org.app.test/org/app/test ) a poté vytvořte soubor s názvem MyApplication.java uvnitř testu adresář a zadejte následující obsah:

package org.app.test;

import javafx.application.Application;
import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType;
import javafx.stage.Stage;

public class MyApplication extends Application{

   public static void main(String[] args) {
      Application.launch(args);
   }

   @Override
   public void start(Stage stage) throws Exception {

      Alert alert = new Alert(Alert.AlertType.INFORMATION);
      alert.setTitle("Congratulation!");
      alert.setHeaderText("You did it. The application is
         running.
      Press OK to close");
      alert.setContentText("You have successfully created a
         custom image");
      alert.showAndWait().ifPresent(rs -> {
         if (rs == ButtonType.OK) {
            System.out.println("Pressed OK.");
         }
      });
   }
}

Krok 5

Vytvořte /Home/SampleProject/mods adresář. Zde uložíme zkompilovaný kód. Zkompilujte zdrojový kód následovně. Současný pracovní adresář je /Home/SampleProject .

javac -d mods --module-source-path src
src/org.app.test/module-info.java
src/org.app.test/org/app/test/MyApplication.java

Krok 6

Nyní vytvoříme soubor JAR a uložíme jej do lib adresář (například /Home/SampleProject/lib ) takto:

jar --create --file lib/org.app.test.jar
--main-class org.app.test.MyApplication
-C mods/org.app.test .

Krok 7

Chcete-li otestovat, spusťte aplikaci následovně:

java --module-path lib -m org.app.test

Krok 8

Nyní vytvoříme soubor JMOD a uložíme jej do jmods adresář (například Home/SampleProject/jmods ):

jmod create --class-path lib/org.app.test.jar
   jmods/org.app.test.jmod

Krok 9

Nakonec vytvořte vlastní obrázek pomocí následujícího příkazu:

jlink --module-path /usr/lib/jvm/java-9-oracle/jmods/:jmods
--add-modules org.app.test
--launcher runapp=org.app.test
--output dist

Tím se vytvoří složka s názvem dist který obsahuje vše, co je potřeba ke spuštění aplikace. Program s názvem spouštěče runapp , je obsažen v dist/bin adresář. Poklepáním na něj spustíte.


Obrázek 1: Program běží

To je vše.

Závěr

Podrobný popis každé z možností příkazu použitých v tomto článku najdete v příslušné dokumentaci. Vyzkoušejte jednoduchý program a sestavte jej od začátku do konce. To by vytvořilo potřebnou jistotu pro experimentování s trochu komplikovanějším programem, jako je použití více než jednoho modulu a řešení jejich závislostí. JDK9 umožnil vývojářům připravit jeho runtime zavazadla tak, aby byla naplněna pouze nezbytnými moduly. To je úžasné a vynikající, něco, co většina z nás od Javy dlouho očekává. Java aplikace se nyní může zbavit zavazadel, které musela nést ze zjevně malého důvodu, a stát se platformou optimalizovanou pro distribuci.


  1. Příklady MONTH() – MySQL

  2. Jak upravit soubor MySQL my.cnf

  3. Jak LENGTH() funguje v MariaDB

  4. Získejte všechna data mezi dvěma daty na serveru SQL Server