Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Hình ảnh thời gian chạy tùy chỉnh trong Java 9 là gì?

Java 9 đã giới thiệu ý tưởng về hình ảnh thời gian chạy mô-đun với Project Jigsaw và chính thức giải quyết vấn đề vận chuyển thời gian chạy Java dưới dạng các tạo tác nguyên khối. Hình ảnh thời gian chạy nguyên khối không chỉ nặng về việc sử dụng bộ nhớ mà còn làm giảm hiệu suất tổng thể của ứng dụng chạy trên đó. Giờ đây, chúng tôi có thể đóng gói một tập hợp con tùy chỉnh của JRE, dựa trên nhu cầu cá nhân của các ứng dụng chạy trên nó và tăng hiệu quả của chúng. Bài viết này có một cái nhìn tổng thể về tính năng này của các hình ảnh thời gian chạy tùy chỉnh được giới thiệu với Java 9.

Tổng quan

Tác động của ý tưởng tạo hình ảnh thời gian chạy mô-đun với Java 9 là rất lớn. Nó mở ra cánh cửa cho một ứng dụng được xây dựng tùy chỉnh ngay từ nền tảng mà nó chạy. Nền tảng Java đã tăng cường chức năng của nó với mỗi phiên bản mới. Không có gì ngạc nhiên khi tại một thời điểm nào đó, thời gian chạy sẽ là một hiện vật nguyên khối và gây ảnh hưởng nặng nề đến bộ nhớ và hiệu suất. Do đó, các nhà phát triển từ lâu đã yêu cầu một cách giải quyết vấn đề này. Ngoài ra, hầu hết các chương trình không sử dụng toàn bộ Nền tảng Java. Nếu một chương trình có thể được tối ưu hóa cho hiệu suất và việc sử dụng bộ nhớ, tại sao nền tảng mà nó chạy lại không thể được tùy chỉnh? Java 8 đã thực hiện bước đầu tiên và cố gắng triển khai một số khía cạnh của nó với Hồ sơ nhỏ gọn . Java 9 đã tiếp tục và triển khai một cách để tùy chỉnh tạo hình ảnh thời gian chạy mà không có ràng buộc nào Hồ sơ nhỏ gọn áp đặt. Nó đã có một cách tiếp cận toàn diện trong việc đóng gói hình ảnh thời gian chạy. Bản thân nền tảng được mô-đun hóa để kích hoạt tính năng này. Mã ứng dụng được đóng gói trong các mô-đun có thể được gửi cùng với các hình ảnh thời gian chạy tùy chỉnh chỉ chứa các mô-đun nền tảng được ứng dụng sử dụng. Do đó, một chương trình ứng dụng có thể là một tạo tác gói duy nhất bao gồm JRE tùy chỉnh. Điều này chắc chắn thúc đẩy hiệu suất, mang lại thời gian khởi động với ít dấu chân bộ nhớ hơn. Nếu ứng dụng chạy trong Đám mây, những điều này sẽ giảm đáng kể tình trạng quá tải mạng và thời gian tải xuống.

Cấu hình nhỏ gọn

Mặc dù Java 9 đã vượt qua khái niệm Hồ sơ nhỏ gọn được giới thiệu cùng với Java 8, việc hiểu và đánh giá cao cột mốc đã đạt được thường rất hữu ích. Theo một cách nào đó, Java 9 đã tiếp thu ý tưởng và nâng cấp khái niệm về Hồ sơ nhỏ gọn một cách tổng thể hơn.

A Hồ sơ nhỏ gọn xác định các tập hợp con của API nền tảng Java SE có thể giảm kích thước tĩnh của thời gian chạy Java. Ý tưởng này về cơ bản được nhắm mục tiêu hoạt động trên các thiết bị hạn chế tài nguyên có dung lượng lưu trữ nhỏ hơn, chẳng hạn như thiết bị nhúng. Về cơ bản có ba cấu hình, được gọi là compact1 , compact2 compact3 . Mỗi cấu hình được đánh số cao hơn là một tập hợp siêu của cấu hình được đánh số thấp hơn của nó. Điều này có nghĩa là compact1 là một tập hợp con thích hợp của compact2 , compact2 là một tập hợp con thích hợp của compact3 compact3 ngược lại, là một tập hợp con thích hợp của API Java 8 SE đầy đủ.

Tài liệu tham khảo:

  • Cấu hình nhỏ gọn, Tài liệu Java SE 8
  • Tổng quan về cấu hình nhỏ gọn 8 nhúng Java SE
  • Giới thiệu về cấu hình nhỏ gọn trong Java 8

Giới thiệu JIMAGE

JIMAGE là một định dạng tệp đặc biệt được giới thiệu với Java 9 để lưu trữ các hình ảnh thời gian chạy tùy chỉnh. Định dạng tệp này được tối ưu hóa cho hiệu suất và lưu trữ. Định dạng tệp về cơ bản hoạt động như một vùng chứa các tài nguyên, lớp và mô-đun JDK, đồng thời lập chỉ mục chúng để tìm kiếm nhanh và tải lớp nhanh hơn. Không giống như các định dạng tệp khác như JAR và JMOD, JIMAGE hiếm khi được nhà phát triển sử dụng vì nó liên quan đến nội bộ JDK ngoại trừ khi người ta muốn xây dựng hình ảnh thời gian chạy tùy chỉnh. Tải lớp nhanh hơn với JIMAGE sau đó là JAR hoặc JMOD vì nó được tối ưu hóa đặc biệt cho việc đó. Ngoài ra, JIMAGE chỉ có thể được sử dụng trong thời gian chạy. JIMAGE vẫn còn trong những năm đầu của nó. Có rất ít thông tin về nhà phát triển có sẵn; có lẽ nhiều điều sẽ được tiết lộ sau.

Tạo hình ảnh tùy chỉnh

Java 9 cung cấp jlink công cụ để tạo hình ảnh thời gian chạy dành riêng cho nền tảng. Hình ảnh tùy chỉnh chứa các mô-đun cụ thể của ứng dụng và các mô-đun bắt buộc của nền tảng. Vì kích thước của hình ảnh thời gian chạy hay còn gọi là JRE được giảm xuống mức tối thiểu, hình ảnh ứng dụng cùng với JRE cũng ở mức tối thiểu. Nó bao gồm JRE như một đơn vị phân phối duy nhất cùng với chương trình. jlink công cụ nằm trong / bin thư mục của JDK9 thư mục đã cài đặt. Có một số tùy chọn có sẵn được liên kết với công cụ này có thể được sử dụng theo yêu cầu. Có thể lấy mô tả bằng cách sử dụng –help tùy chọn có sẵn với jlink yêu cầu. Tại đây, nó được trích xuất để thuận tiện hoặc bạn có thể gõ jlink –help trong dòng lệnh để lấy danh sách sau.

Cách sử dụng:

jlink <options> --module-path <modulepath>
   --add-modules <module>[,<module>...]
Tùy chọn Mô tả
- mô-đun bổ sung [, …] Mô-đun gốc cần giải quyết
- bind-services Liên kết trong các mô-đun của nhà cung cấp dịch vụ và các phần phụ thuộc của chúng

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

–Disable-plugin

–Endian

Cho phép nén tài nguyên:

Mức 0:Không nén

Cấp độ 1:Chia sẻ chuỗi liên tục

Cấp độ 2:ZIP

Tắt trình cắm được đề cập

Thứ tự byte của jimage đã tạo (mặc định:gốc)

-h, –help

–Ignore-ký-thông tin

–Launcher = [/ ]

–Limit-module [, …]

–List-plug-in

In thông báo trợ giúp này

Khắc phục lỗi nghiêm trọng khi các JAR mô-đun đã ký được liên kết trong hình ảnh. Các tệp liên quan đến chữ ký của các JAR mô-đun đã ký không được sao chép vào hình ảnh thời gian chạy.

Thêm lệnh khởi chạy có tên đã cho cho mô-đun và lớp chính nếu được chỉ định.

Giới hạn vũ trụ của các mô-đun có thể quan sát được.

Liệt kê các trình cắm sẵn có.

-p, –module-path

–No-header-files

–No-man-pages

–Output

–Save-opts

Đường dẫn mô-đun

Loại trừ bao gồm các tệp tiêu đề

Loại trừ các trang người đàn ông

Vị trí của đường dẫn đầu ra

Lưu các tùy chọn jlink trong tệp đã cho

-G, –strip-debug

–Suggest-provider [,…]

Dải thông tin gỡ lỗi

Đề xuất các nhà cung cấp triển khai các loại dịch vụ nhất định từ đường dẫn mô-đun

-v, –verbose

–Version

@

Bật tính năng theo dõi chi tiết

Thông tin phiên bản

Đọc các tùy chọn từ tệp

Một ví dụ đơn giản

Ở đây, chúng ta sẽ đi qua một chương trình rất đơn giản từ đầu đến cuối về cách tạo hình ảnh thời gian chạy của một ứng dụng Java. Chúng tôi sẽ giả định rằng JDK9 được cài đặt đúng cách và PATH JAVA_HOME biến môi trường được thiết lập thích hợp. Trong trường hợp của tôi, nó được cài đặt và đặt như sau (trên Nền tảng Linux):

  • JDK9 thư mục đã cài đặt / usr / lib / jvm / java-9-oracle
  • PATH được đặt thành / usr / lib / jvm / java-9-oracle / bin
  • JAVA_HOME được đặt thành / usr / lib / jvm / java-9-oracle

Bước 1

Tạo thư mục có tên / Home / SampleProject và một src thư mục bên trong nó (ví dụ: / Home / SampleProject / src ).

Bước 2

Tạo thư mục có tên org.app.test bên trong src thư mục (ví dụ: /Home/SampleProject/src/org.app.test ).

Bước 3

Bây giờ, bên trong org.app.test thư mục, tạo tệp có tên module-info.java . Và nhập các nội dung sau:

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

Bước 4

Bây giờ, hãy tạo một thư mục có tên org, app, test bên trong cái khác (ví dụ: org.app.test / org / app / test ) và sau đó tạo một tệp có tên MyApplication.java bên trong bài kiểm tra thư mục và nhập các nội dung sau:

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

Bước 5

Tạo / Home / SampleProject / mods danh mục. Tại đây, chúng tôi sẽ lưu mã đã biên dịch. Biên dịch mã nguồn như sau. Thư mục làm việc hiện tại là / 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

Bước 6

Bây giờ, hãy tạo tệp JAR và lưu trữ trong lib thư mục (chẳng hạn như / Home / SampleProject / lib ) như sau:

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

Bước 7

Để kiểm tra, hãy chạy ứng dụng như sau:

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

Bước 8

Bây giờ, hãy tạo tệp JMOD và lưu nó trong jmods thư mục (ví dụ: Home / SampleProject / jmods ):

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

Bước 9

Cuối cùng, hãy tạo hình ảnh tùy chỉnh bằng cách sử dụng lệnh sau:

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

Thao tác này sẽ tạo một thư mục có tên dist trong đó chứa tất cả những gì cần thiết để chạy ứng dụng. Chương trình, với tên trình khởi chạy được đặt là runapp , được chứa trong dist / bin danh mục. Nhấp đúp vào nó để chạy.


Hình 1: Chương trình đang chạy

Đó là tất cả.

Kết luận

Tham khảo tài liệu thích hợp để biết mô tả chi tiết về từng tùy chọn lệnh được sử dụng trong bài viết này. Hãy thử một chương trình đơn giản và xây dựng nó từ đầu đến cuối. Điều này sẽ xây dựng sự tự tin cần thiết để thử nghiệm với một chương trình phức tạp hơn một chút, chẳng hạn như sử dụng nhiều hơn một mô-đun và xử lý các phần phụ thuộc của chúng. JDK9 đã trao quyền cho các nhà phát triển để chuẩn bị hành trang thời gian chạy của nó chỉ chứa đầy các mô-đun cần thiết. Điều này thật tuyệt vời và xuất sắc, điều mà hầu hết chúng ta đã mong đợi từ Java từ lâu. Một ứng dụng Java giờ đây có thể loại bỏ hành lý mà nó phải mang theo vì một lý do nhỏ và trở thành nền tảng được tối ưu hóa trong phân phối.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tác động hiệu suất của các kỹ thuật xử lý lỗi khác nhau

  2. Bộ xử lý AMD EPYC trong Máy ảo Azure

  3. Sử dụng Docker trên Azure Container Service với Swarm Cluster

  4. Công nghệ JPA của Java là gì?

  5. SQL Right Join