Database
 sql >> Baza danych >  >> RDS >> Database

Co to jest niestandardowy obraz środowiska wykonawczego w Javie 9?

Java 9 wprowadziła ideę modularnych obrazów środowiska uruchomieniowego w Project Jigsaw i oficjalnie rozwiązała problem dostarczania środowiska wykonawczego Java jako monolitycznych artefaktów. Monolityczne obrazy uruchomieniowe nie tylko obciążały pamięć, ale także obniżały ogólną wydajność działającej na nich aplikacji. Teraz możemy spakować dostosowany podzbiór JRE, w oparciu o indywidualne potrzeby aplikacji, które na nim działają i zwiększyć ich wydajność. Ten artykuł zawiera całościowe spojrzenie na tę funkcję niestandardowych obrazów środowiska wykonawczego wprowadzoną w Javie 9.

Przegląd

Wpływ idei stworzenia modularnego obrazu środowiska uruchomieniowego w Javie 9 jest ogromny. Otwiera drzwi do niestandardowej aplikacji bezpośrednio z platformy, na której działa. Platforma Java z każdą nową wersją zwiększa swoją funkcjonalność. Nie jest niespodzianką, że w pewnym momencie środowisko wykonawcze stanie się monolitycznym artefaktem i odbije się na pamięci i wydajności. Z tego powodu programiści od dawna prosili o wyjście z tego problemu. Ponadto większość programów nie korzysta w całości z platformy Java. Jeśli program można zoptymalizować pod kątem wydajności i użycia pamięci, dlaczego nie można również dostosować platformy, na której działa? Java 8 zrobiła pierwszy krok i próbowała zaimplementować niektóre jego aspekty za pomocą Profilów kompaktowych . Java 9 poszła naprzód i zaimplementowała sposób tworzenia niestandardowych obrazów środowiska wykonawczego bez ograniczeń, które Kompaktowe profile nałożone. Przyjęto holistyczne podejście do pakowania obrazów środowiska wykonawczego. Sama platforma jest zmodularyzowana, aby umożliwić tę funkcję. Kod aplikacji spakowany w moduły może być dostarczany z niestandardowymi obrazami środowiska wykonawczego, które zawierają tylko te moduły platformy, które są używane przez aplikację. W związku z tym aplikacja może być pojedynczym artefaktem w pakiecie, który zawiera niestandardowe środowisko JRE. To z pewnością wpływa na wydajność, zapewniając czas uruchamiania przy mniejszej ilości pamięci. Jeśli aplikacja działa w chmurze, znacznie zmniejsza to przeciążenie sieci i czas pobierania.

Profil kompaktowy

Chociaż Java 9 przekroczyła koncepcję Compact Profile wprowadzony wraz z Javą 8, często pomocne jest zrozumienie i docenienie osiągniętego kamienia milowego. W pewnym sensie Java 9 wykorzystała ten pomysł i unowocześniła koncepcję profilu kompaktowego w bardziej holistyczny sposób.

Profil kompaktowy definiuje podzbiory interfejsu API platformy Java SE, które mogą zmniejszyć statyczny rozmiar środowiska wykonawczego Java. Ten pomysł jest zasadniczo ukierunkowany na pracę na urządzeniach o ograniczonych zasobach, które mają mniejszą pojemność pamięci, takich jak urządzenie wbudowane. Istnieją zasadniczo trzy profile o nazwie compact1 , kompakt2 i compact3 . Każdy profil o wyższym numerze jest nadrzędnym zestawem jego profilu o niższym numerze. Oznacza to, że compact1 jest właściwym podzbiorem compact2 , kompakt2 jest właściwym podzbiorem compact3 i compact3 z kolei jest właściwym podzbiorem pełnego stosu Java 8 SE API.

Referencje:

  • Profile kompaktowe, dokumentacja Java SE 8
  • Przegląd profili Java SE Embedded 8 Compact
  • Wprowadzenie do profili Java 8 Compact

Przedstawiamy JIMAGE

JIMAGE to specjalny format pliku wprowadzony wraz z Javą 9 do przechowywania niestandardowych obrazów środowiska uruchomieniowego. Ten format pliku jest zoptymalizowany pod kątem wydajności i przechowywania. Format pliku zasadniczo działa jako kontener dla zasobów, klas i modułów JDK i indeksuje je w celu szybkiego wyszukiwania i szybszego ładowania klas. W przeciwieństwie do innych formatów plików, takich jak JAR i JMOD, JIMAGE jest rzadko używany przez programistów, ponieważ odnosi się do wewnętrznych elementów JDK, z wyjątkiem sytuacji, gdy chce się zbudować niestandardowy obraz środowiska wykonawczego. Ładowanie klas jest szybsze dzięki JIMAGE niż JAR lub JMOD, ponieważ jest specjalnie do tego zoptymalizowane. Ponadto JIMAGE może być używany tylko w czasie wykonywania. JIMAGE jest wciąż w początkowych latach. Dostępnych jest bardzo mało informacji dla programistów; być może więcej zostanie ujawnionych później.

Tworzenie niestandardowych obrazów

Java 9 dostarcza jlink narzędzie do tworzenia obrazów środowiska uruchomieniowego specyficznych dla platformy. Obrazy niestandardowe zawierają moduły specyficzne dla aplikacji i wymagane moduły platformy. Ponieważ rozmiar obrazu środowiska wykonawczego zwanego JRE jest zmniejszony do absolutnego minimum, obraz aplikacji wraz ze środowiskiem JRE jest również minimalny. Łączy JRE jako pojedynczą jednostkę dostawy wraz z programem. link narzędzie znajduje się w /bin katalog JDK9 zainstalowany katalog. Dostępnych jest kilka opcji powiązanych z tym narzędziem, których można używać zgodnie z wymaganiami. Opis można uzyskać, korzystając z –pomocy opcja dostępna z jlink Komenda. Tutaj jest wyodrębniany dla wygody lub możesz wpisać jlink –help w wierszu poleceń, aby uzyskać następującą listę.

Użycie:

jlink <options> --module-path <modulepath>
   --add-modules <module>[,<module>...]
Opcja Opis
–dodaj moduły [,…] Moduły roota do rozwiązania
–bind-services Link w modułach usługodawcy i ich zależnościach

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

–disable-plugin

–endian

Włącz kompresję zasobów:

Poziom 0:brak kompresji

Poziom 1:Stałe udostępnianie ciągów

Poziom 2:ZIP

Wyłącz wspomnianą wtyczkę

Kolejność bajtów wygenerowanego jimage (domyślnie:natywny)

-h, –pomoc

–ignoruj-informacje-podpisywania

–launcher =[/]

–limit-moduły [,…]

–lista-wtyczek

Wydrukuj tę wiadomość pomocy

Pomijaj błąd krytyczny, gdy podpisane modułowe pliki JAR są połączone w obrazie. Pliki związane z podpisem podpisanych modularnych plików JAR nie są kopiowane do obrazu środowiska wykonawczego.

Dodaj polecenie uruchamiające o podanej nazwie dla modułu i głównej klasy, jeśli określono.

Ogranicz wszechświat obserwowalnych modułów.

Wyświetl listę dostępnych wtyczek.

-p, –ścieżka-modułu <ścieżka>

–brak plików-nagłówków

–no-man-pages

–wyjście <ścieżka>

–save-opts

Ścieżka modułu

Wyklucz dołączanie plików nagłówkowych

Wyklucz strony podręcznika

Lokalizacja ścieżki wyjściowej

Zapisz opcje jlink w podanym pliku

-G, –strip-debug

–proponuj-dostawców [,…]

Usuń informacje debugowania

Zaproponuj dostawców, którzy implementują dane typy usług ze ścieżki modułu

-v, –pełny

–wersja

@

Włącz szczegółowe śledzenie

Informacje o wersji

Odczytaj opcje z pliku

Prosty przykład

Tutaj omówimy bardzo prosty program od początku do końca, jak utworzyć obraz środowiska wykonawczego aplikacji Java. Założymy, że JDK9 jest poprawnie zainstalowany, a PATH i JAVA_HOME zmienne środowiskowe są odpowiednio ustawione. W moim przypadku jest zainstalowany i ustawiony w następujący sposób (na platformie Linux):

  • JDK9 zainstalowany katalog /usr/lib/jvm/java-9-oracle
  • ŚCIEŻKA jest ustawiona na /usr/lib/jvm/java-9-oracle/bin
  • JAVA_HOME jest ustawiona na /usr/lib/jvm/java-9-oracle

Krok 1

Utwórz katalog o nazwie /Home/SampleProject i źródło katalog w nim (na przykład /Home/SampleProject/src ).

Krok 2

Utwórz katalog o nazwie org.app.test wewnątrz źródła katalog (na przykład /Home/SampleProject/src/org.app.test ).

Krok 3

Teraz wewnątrz org.app.test katalogu, utwórz plik o nazwie module-info.java . I wpisz następującą treść:

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

Krok 4

Teraz utwórz katalog o nazwie org, app, test jeden w drugim (na przykład org.app.test/org/app/test ), a następnie utwórz plik o nazwie MyApplication.java wewnątrz testu katalogu i wpisz następującą zawartość:

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

Utwórz /Home/SampleProject/mody informator. Tutaj zapiszemy skompilowany kod. Skompiluj kod źródłowy w następujący sposób. Obecny katalog roboczy to /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

Teraz utwórzmy plik JAR i zapiszmy go w lib katalog (np. /Home/SampleProject/lib ) w następujący sposób:

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

Krok 7

Aby przetestować, uruchom aplikację w następujący sposób:

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

Krok 8

Teraz utwórzmy plik JMOD i zapiszmy go w jmodach katalog (na przykład Home/SampleProject/jmods ):

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

Krok 9

Na koniec utwórzmy niestandardowy obraz za pomocą następującego polecenia:

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

Spowoduje to utworzenie folderu o nazwie dist który zawiera wszystko, co jest wymagane do uruchomienia aplikacji. Program z nazwą programu uruchamiającego podaną jako runapp , znajduje się w dist/bin informator. Kliknij dwukrotnie, aby uruchomić.


Rysunek 1: Program działa

To wszystko.

Wniosek

Zapoznaj się z odpowiednią dokumentacją, aby uzyskać szczegółowy opis każdej z opcji poleceń użytych w tym artykule. Wypróbuj prosty program i zbuduj go od początku do końca. Zwiększyłoby to pewność niezbędną do eksperymentowania z nieco bardziej skomplikowanym programem, takim jak używanie więcej niż jednego modułu i radzenie sobie z ich zależnościami. JDK9 umożliwiło programistom przygotowanie bagażu środowiska wykonawczego do wypełnienia tylko niezbędnymi modułami. To jest niesamowite i doskonałe, coś, czego większość z nas oczekiwała od Javy od dłuższego czasu. Aplikacja Java może teraz zlekceważyć bagaż, który musiała nosić z pozornie niewielkiego powodu i zostać zoptymalizowana pod kątem dystrybucji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klucze SQL, unikalne i podstawowe

  2. Jak maskować tabele i zachować integralność referencyjną?

  3. Przewodnik po wdrażaniu TimescaleDB za pomocą Docker

  4. Jak zaktualizować kolumnę na podstawie innej kolumny w SQL?

  5. Top 9 systemów zarządzania bazami danych dla szablonów Joomla