Java 9 memperkenalkan ide gambar runtime modular dengan Project Jigsaw dan secara resmi memecahkan masalah pengiriman runtime Java sebagai artefak monolitik. Gambar runtime monolitik tidak hanya membebani penggunaan memori tetapi juga memperlambat kinerja keseluruhan aplikasi yang berjalan di atasnya. Kami sekarang dapat mengemas subset JRE yang disesuaikan, berdasarkan kebutuhan individu dari aplikasi yang berjalan di dalamnya dan meningkatkan manifold efisiensinya. Artikel ini membahas secara menyeluruh fitur gambar runtime kustom yang diperkenalkan dengan Java 9.
Ikhtisar
Dampak dari ide membuat gambar runtime modular dengan Java 9 sangat besar. Ini membuka pintu untuk aplikasi yang dibuat khusus langsung dari platform tempat aplikasi itu berjalan. Platform Java telah meningkatkan fungsinya dengan setiap versi baru. Tidak mengherankan bahwa pada titik tertentu runtime akan menjadi artefak monolitik dan sangat membebani memori dan kinerja. Karena itu, pengembang telah lama meminta jalan keluar dari masalah ini. Juga, sebagian besar program tidak menggunakan Platform Java secara keseluruhan. Jika sebuah program dapat dioptimalkan untuk kinerja dan penggunaan memori, mengapa platform yang menjalankannya juga tidak dapat dikustomisasi? Java 8 mengambil langkah awal dan mencoba menerapkan beberapa aspeknya dengan Profil Ringkas . Java 9 membawanya ke depan dan menerapkan cara untuk membuat gambar runtime secara kustom tanpa kendala yang Profil Ringkas dikenakan. Dibutuhkan pendekatan holistik dalam mengemas gambar runtime. Platform itu sendiri dimodulasi untuk mengaktifkan fitur ini. Kode aplikasi yang dikemas dalam modul dapat dikirimkan dengan gambar runtime kustom yang hanya berisi modul platform yang digunakan oleh aplikasi. Dengan demikian, program aplikasi dapat berupa artefak yang dibundel tunggal yang mencakup JRE khusus. Ini tentu saja meningkatkan kinerja, memberikan waktu startup dengan jejak memori yang lebih sedikit. Jika aplikasi berjalan di Cloud, ini akan mengurangi beban jaringan dan waktu pengunduhan secara signifikan.
Profil Ringkas
Meskipun Java 9 telah melewati konsep Profil Ringkas diperkenalkan dengan Java 8, sering kali membantu untuk memahami dan menghargai pencapaian yang dicapai. Di satu sisi, Java 9 memanfaatkan ide tersebut dan meningkatkan konsep Profil Ringkas secara lebih holistik.
Profil Ringkas mendefinisikan subset dari API platform Java SE yang dapat mengurangi ukuran statis runtime Java. Ide ini pada dasarnya ditargetkan untuk bekerja pada perangkat dengan sumber daya terbatas yang memiliki kapasitas penyimpanan lebih kecil, seperti perangkat tertanam. Pada dasarnya ada tiga profil, yang disebut compact1 , kompak2 , dan compact3 . Setiap profil bernomor lebih tinggi adalah super-set dari profil bernomor yang lebih rendah. Artinya compact1 adalah bagian yang tepat dari compact2 , kompak2 adalah bagian yang tepat dari compact3 , dan compact3 , pada gilirannya, adalah subset yang tepat dari tumpukan penuh Java 8 SE API.
Referensi:
- Profil Ringkas, Dokumentasi Java SE 8
- Ikhtisar Profil Ringkas Tertanam Java SE 8
- Pengantar Profil Ringkas Java 8
Memperkenalkan JIMAGE
JIMAGE adalah format file khusus yang diperkenalkan dengan Java 9 untuk menyimpan gambar runtime kustom. Format file ini dioptimalkan untuk kinerja dan penyimpanan. Format file pada dasarnya bertindak sebagai wadah untuk sumber daya, kelas, dan modul JDK, dan mengindeksnya untuk pencarian cepat dan pemuatan kelas yang lebih cepat. Tidak seperti format file lain seperti JAR dan JMOD, JIMAGE jarang digunakan oleh pengembang karena berkaitan dengan internal JDK kecuali jika seseorang ingin membuat image runtime kustom. Pemuatan kelas lebih cepat dengan JIMAGE daripada JAR atau JMOD karena secara khusus dioptimalkan untuk itu. Juga, JIMAGE hanya dapat digunakan pada saat runtime. JIMAGE masih dalam tahun-tahun awal. Ada sangat sedikit informasi pengembang yang tersedia; mungkin lebih banyak yang akan diungkap nanti.
Membuat Gambar Kustom
Java 9 memasok jlink alat untuk membuat gambar runtime khusus platform. Gambar khusus berisi modul khusus aplikasi dan modul platform yang diperlukan. Karena ukuran gambar runtime alias JRE dikurangi menjadi minimum, gambar aplikasi bersama dengan JRE juga minimal. Ini menggabungkan JRE sebagai satu unit pengiriman bersama dengan program. jlink alat ini terletak di /bin direktori JDK9 direktori yang diinstal. Ada beberapa pilihan yang tersedia yang terkait dengan alat ini yang dapat digunakan sesuai dengan kebutuhan. Deskripsi dapat diperoleh dengan menggunakan –help opsi yang tersedia dengan jlink memerintah. Di sini, itu diekstraksi untuk kenyamanan, atau Anda dapat mengetik jlink –help di baris perintah untuk mendapatkan daftar berikut.
Penggunaan:
jlink <options> --module-path <modulepath> --add-modules <module>[,<module>...]
Opsi | Deskripsi |
–tambahkan-modul | Modul root untuk diselesaikan |
–bind-services | Tautan dalam modul penyedia layanan dan dependensinya |
-c, –kompres=<0|1|2>
–nonaktifkan-plugin
–endian | Aktifkan kompresi sumber daya: Level 0:Tanpa kompresi Level 1:Berbagi string secara konstan Tingkat 2:ZIP Nonaktifkan plugin yang disebutkan Urutan byte jimage yang dihasilkan (default:native) |
-h, –help –ignore-signing-information
–launcher
–limit-modul –list-plug-in | Cetak pesan bantuan ini Menekan kesalahan fatal saat JAR modular yang ditandatangani ditautkan dalam gambar. File terkait tanda tangan dari JAR modular yang ditandatangani tidak disalin ke gambar runtime. Tambahkan perintah peluncur dari nama yang diberikan untuk modul dan kelas utama jika ditentukan. Batasi semesta modul yang dapat diamati. Cantumkan plugin yang tersedia. |
-p, –module-path –no-header-file –tidak ada halaman manual
–keluaran
–save-opts | Jalur modul Kecualikan sertakan file header Kecualikan halaman manual Lokasi jalur keluaran Simpan opsi jlink di file yang diberikan |
-G, –strip-debug
–suggest-providers [ | Hapus informasi debug Sarankan penyedia yang menerapkan jenis layanan yang diberikan dari jalur modul |
-v, –verbose –versi
@ | Aktifkan penelusuran verbose Informasi versi Baca opsi dari file |
Contoh Sederhana
Di sini, kita akan membahas program yang sangat sederhana dari awal hingga akhir tentang cara membuat gambar runtime aplikasi Java. Kami akan berasumsi bahwa JDK9 diinstal dengan benar dan PATH dan JAVA_HOME variabel lingkungan diatur dengan tepat. Dalam kasus saya, ini diinstal dan disetel sebagai berikut (pada Platform Linux):
- JDK9 direktori yang diinstal /usr/lib/jvm/java-9-Oracle
- JALAN disetel ke /usr/lib/jvm/java-9-Oracle/bin
- JAVA_HOME disetel ke /usr/lib/jvm/java-9-Oracle
Langkah 1
Buat direktori bernama /Home/SampleProject dan src direktori di dalamnya (misalnya, /Home/SampleProject/src ).
Langkah 2
Buat direktori bernama org.app.test di dalam src direktori (sebagai contoh, /Home/SampleProject/src/org.app.test ).
Langkah 3
Sekarang, di dalam org.app.test direktori, buat file bernama module-info.java . Dan, ketik konten berikut:
module org.app.test{ requires javafx.controls; exports org.app.test; }
Langkah 4
Sekarang, buat direktori bernama org, app, test satu di dalam yang lain (misalnya, org.app.test/org/app/test ) lalu buat file bernama MyApplication.java di dalam pengujian direktori dan ketik konten berikut:
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."); } }); } }
Langkah 5
Buat /Home/SampleProject/mods direktori. Di sini, kami akan menyimpan kode yang dikompilasi. Kompilasi kode sumber sebagai berikut. Direktori kerja saat ini adalah /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
Langkah 6
Sekarang, mari buat file JAR dan simpan di lib direktori (seperti /Home/SampleProject/lib ) sebagai berikut:
jar --create --file lib/org.app.test.jar --main-class org.app.test.MyApplication -C mods/org.app.test .
Langkah 7
Untuk menguji, jalankan aplikasi sebagai berikut:
java --module-path lib -m org.app.test
Langkah 8
Sekarang, mari kita buat file JMOD dan simpan di jmods direktori (misalnya, Home/SampleProject/jmods ):
jmod create --class-path lib/org.app.test.jar jmods/org.app.test.jmod
Langkah 9
Terakhir, mari kita buat gambar kustom dengan menggunakan perintah berikut:
jlink --module-path /usr/lib/jvm/java-9-oracle/jmods/:jmods --add-modules org.app.test --launcher runapp=org.app.test --output dist
Ini akan membuat folder bernama dist yang berisi semua yang diperlukan untuk menjalankan aplikasi. Program, dengan nama peluncur yang diberikan sebagai runapp , terdapat dalam dist/bin direktori. Klik dua kali untuk menjalankannya.
Gambar 1: Program sedang berjalan
Itu saja.
Kesimpulan
Lihat dokumentasi yang sesuai untuk penjelasan rinci tentang setiap opsi perintah yang digunakan dalam artikel ini. Cobalah program sederhana dan bangun dari awal hingga akhir. Ini akan membangun kepercayaan diri yang diperlukan untuk bereksperimen dengan program yang sedikit lebih rumit, seperti menggunakan lebih dari satu modul dan menangani dependensinya. JDK9 telah memberdayakan pengembang untuk menyiapkan bagasi runtime untuk diisi hanya dengan modul yang diperlukan. Ini luar biasa dan luar biasa, sesuatu yang sebagian besar dari kita telah harapkan dari Jawa untuk waktu yang lama. Aplikasi Java sekarang dapat mengabaikan beban yang harus dibawanya untuk alasan yang tampaknya kecil dan menjadi platform yang dioptimalkan dalam distribusi.