Database
 sql >> база данни >  >> RDS >> Database

Какво е персонализирано изображение по време на изпълнение в Java 9?

Java 9 въведе идеята за модулни изображения по време на изпълнение с Project Jigsaw и официално реши проблема с доставката на Java runtime като монолитни артефакти. Монолитните изображения по време на изпълнение не само бяха тежки за използването на паметта, но и намалиха цялостната производителност на приложението, работещо върху него. Вече можем да опаковаме персонализирано подмножество от JRE, въз основа на индивидуалните нужди на приложенията, които работят върху него, и да увеличим многократно тяхната ефективност. Тази статия разглежда цялостен поглед върху тази функция на персонализирани изображения по време на изпълнение, въведени с Java 9.

Общ преглед

Въздействието на идеята за създаване на модулен образ по време на изпълнение с Java 9 е огромно. Той отваря вратата за специално създадено приложение направо от платформата, на която работи. Платформата Java увеличава своята функционалност с всяка нова версия. Не е изненада, че в един момент времето за изпълнение ще бъде монолитен артефакт и ще окаже тежко влияние върху паметта и производителността. Поради това разработчиците отдавна искат изход от този проблем. Освен това повечето програми не използват Java платформата в нейната цялост. Ако една програма може да бъде оптимизирана за производителност и използване на паметта, защо платформата, на която се изпълнява, също не може да бъде персонализирана? Java 8 направи първоначалната стъпка и се опита да приложи някои аспекти от нея с Компактни профили . Java 9 го направи напред и внедри начин за персонализирано създаване на изображения по време на изпълнение без ограничения, които Компактни профили наложени. Изисква се цялостен подход при опаковане на изображения по време на изпълнение. Самата платформа е модулирана, за да активира тази функция. Кодът на приложението, пакетиран в модули, може да бъде изпратен с персонализирани изображения по време на изпълнение, които съдържат само онези модули на платформата, които се използват от приложението. По този начин една приложна програма може да бъде единичен пакетен артефакт, който включва персонализирания JRE. Това със сигурност подобрява производителността, предоставяйки време за стартиране с по-малко отпечатъци от паметта. Ако приложението работи в облака, това намалява значително претоварването на мрежата и времето за изтегляне.

Компактен профил

Въпреки че Java 9 надмина концепцията за Компактен профил въведен с Java 8, често е полезно да разберете и оцените постигнатия етап. В известен смисъл Java 9 се захранва с идеята и надгражда концепцията за Компактен профил по по-холистичен начин.

Компактен профил дефинира подмножества на API на платформата Java SE, които могат да намалят статичния размер на времето за изпълнение на Java. Тази идея е основно насочена към работа на устройства с ограничени ресурси, които имат по-малък капацитет за съхранение, като например вградено устройство. Основно има три профила, наречени compact1 , компактен2 и compact3 . Всеки профил с по-висок номер е супернабор от неговия профил с намален номер. Това означава, че compact1 е правилно подмножество на compact2 , компактен2 е правилно подмножество на compact3 и compact3 , от своя страна, е подходящо подмножество на пълния стек Java 8 SE API.

Препратки:

  • Компактни профили, Java SE 8 Документация
  • Общ преглед на вградените 8 компактни профила на Java SE
  • Въведение в Java 8 Compact Profiles

Представяме Ви JIMAGE

JIMAGE е специален файлов формат, въведен с Java 9 за съхраняване на персонализирани изображения по време на изпълнение. Този файлов формат е оптимизиран за производителност и съхранение. Файловият формат основно действа като контейнер за JDK ресурси, класове и модули и ги индексира за бързо търсене и по-бързо зареждане на класове. За разлика от други файлови формати като JAR и JMOD, JIMAGE рядко се използва от разработчиците, тъй като се отнася до вътрешните елементи на JDK, освен когато някой иска да създаде персонализирано изображение по време на изпълнение. Зареждането на класа е по-бързо с JIMAGE, отколкото с JAR или JMOD, тъй като е специално оптимизиран за това. Също така, JIMAGE може да се използва само по време на изпълнение. JIMAGE е все още в ранните си години. Има много малко налична информация за разработчиците; може би повече ще бъдат разкрити по-късно.

Създаване на персонализирани изображения

Java 9 предоставя jlink инструмент за създаване на специфични за платформата изображения по време на изпълнение. Персонализираните изображения съдържат специфични за приложението модули и необходимите модули на платформата. Тъй като размерът на образа по време на изпълнение, известен още като JRE, е намален до минимум, изображението на приложението заедно с JRE също е минимално. Той обединява JRE като единична единица за доставка заедно с програмата. jlink инструментът се намира в /bin директория на JDK9 инсталирана директория. Има няколко налични опции, които са свързани с този инструмент, които могат да се използват според изискването. Описанието може да бъде получено чрез –помощ опция, налична с jlink команда. Тук той се извлича за удобство или можете да въведете jlink –help в командния ред, за да получите следния списък.

Употреба:

jlink <options> --module-path <modulepath>
   --add-modules <module>[,<module>...]
Опция Описание
– add-modules [,…] Основни модули за разрешаване
–bind-services Връзка в модулите на доставчика на услуги и техните зависимости

-c, –компресиране=<0|1|2>

–disable-plugin

–endian

Активиране на компресиране на ресурси:

Ниво 0:Без компресия

Ниво 1:Постоянно споделяне на низ

Ниво 2:ZIP

Деактивирайте споменатата приставка

Редът на байтовете на генерирания имидж (по подразбиране:натив)

-h, –помощ

–ignore-signing-information

–start =[/]

–limit-modules [,…]

–списък-приставки

Отпечатайте това помощно съобщение

Потискане на фатална грешка, когато подписаните модулни JAR файлове са свързани в изображението. Файловете, свързани с подписите на подписаните модулни JAR файлове, не се копират в изображението по време на изпълнение.

Добавете команда за стартиране с даденото име за модула и основния клас, ако е посочено.

Ограничете вселената от наблюдавани модули.

Избройте наличните плъгини.

-p, –път на модула <път>

–без заглавни файлове

–no-man-pages

– изход <път>

–save-opts <име на файл>

Път на модула

Изключване на заглавни файлове с включването

Изключете страниците на ръководството

Местоположение на изходния път

Запазете опциите на jlink в дадения файл

-G, –strip-debug

–suggest-providers [<име>,…]

Отстранете информация за отстраняване на грешки

Предложете доставчици, които внедряват дадените типове услуги от пътя на модула

-v, –подробно

–версия

@<име на файл>

Активиране на подробното проследяване

Информация за версията

Прочетете опциите от файла

Прост пример

Тук ще преминем през много проста програма от началото до края на това как да създадете изображение по време на изпълнение на Java приложение. Ще приемем, че JDK9 е правилно инсталиран и PATH и JAVA_HOME променливата на средата са зададени по подходящ начин. В моя случай той се инсталира и задава както следва (на Linux платформа):

  • JDK9 инсталирана директория /usr/lib/jvm/java-9-oracle
  • ПЪТ е настроен на /usr/lib/jvm/java-9-oracle/bin
  • JAVA_HOME е настроен на /usr/lib/jvm/java-9-oracle

Стъпка 1

Създайте директория с име /Home/SampleProject и src директория вътре в него (например /Home/SampleProject/src ).

Стъпка 2

Създайте директория с име org.app.test вътре в src директория (като пример, /Home/SampleProject/src/org.app.test ).

Стъпка 3

Сега вътре в org.app.test директория, създайте файл с име module-info.java . И въведете следното съдържание:

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

Стъпка 4

Сега създайте директория с име org, app, test един в друг (например org.app.test/org/app/test ) и след това създайте файл с име MyApplication.java вътре втеста директория и въведете следното съдържание:

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.");
         }
      });
   }
}

Стъпка 5

Създайте /Home/SampleProject/mods директория. Тук ще запазим компилирания код. Компилирайте изходния код, както следва. Настоящата работна директория е /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

Стъпка 6

Сега нека създадем JAR файла и да го съхраним в lib директория (като /Home/SampleProject/lib ), както следва:

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

Стъпка 7

За да тествате, стартирайте приложението, както следва:

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

Стъпка 8

Сега нека създадем JMOD файла и да го запишем в jmods директория (например Home/SampleProject/jmods ):

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

Стъпка 9

И накрая, нека създадем персонализираното изображение, като използваме следната команда:

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

Това ще създаде папка с име dist който съдържа всичко необходимо за стартиране на приложението. Програмата, с името на стартовия панел, дадено като runapp , се съдържа в dist/bin директория. Щракнете двукратно върху него, за да стартирате.


Фигура 1: Програмата работи

Това е всичко.

Заключение

Обърнете се към съответната документация за подробно описание на всяка от опциите на командите, използвани в тази статия. Опитайте проста програма и я изградете от началото до края. Това би изградило необходимата увереност за експериментиране с малко по-сложна програма, като например използване на повече от един модул и справяне с техните зависимости. JDK9 даде право на разработчиците да подготвят своя багаж по време на изпълнение, който да бъде запълнен само с необходимите модули. Това е невероятно и отлично, нещо, което повечето от нас очакват от Java от дълго време. Едно Java приложение вече може да се отърве от багажа, което е трябвало да носи по очевидно малка причина и да стане платформа, оптимизирана в разпространението.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Миграция на DB със съветника за няколко таблици NextForm

  2. Как да създадете таблица с множество чужди ключове и да не се объркате

  3. Как да намерите минималната стойност на колона в SQL

  4. Разбиране на разликата между операторите EXCEPT и NOT IN

  5. SQL с чужд ключ:Всичко, което трябва да знаете за операциите с чужд ключ