JDK 12: Ciri-ciri baru di Java 12

Rilis pengeluaran Java Development Kit 12, berdasarkan Java SE (Edisi Standard) 12, kini tersedia. JDK 12 boleh didapati dari Oracle untuk Linux, Windows dan MacOS. 

Di mana memuat turun JDK 12

Anda boleh memuat turun JDK 12 dari laman web Java.net.

Pembinaan sumber terbuka disediakan di bawah GNU General Public License v2, dengan Pengecualian Classpath. Binaan komersial JDK 12 dari Oracle boleh didapati di rangkaian Teknologi Oracle di bawah lesen sumber bukan terbuka.

Ciri-ciri baru di Java 12

Pemungut sampah Shenandoah

Java 12 menambahkan Shenandoah, algoritma pengumpulan sampah eksperimental, untuk mengurangkan masa jeda pengumpulan sampah dengan melakukan kerja evakuasi bersamaan dengan menjalankan benang Java. Shenandoah menyediakan algoritma yang sesuai untuk aplikasi yang menghargai daya tindak balas dan jeda pendek yang dapat diramalkan. Tujuannya bukanlah untuk menyelesaikan semua masalah jeda JVM.

Red Hat pada masa ini menyokong Shenandoah pada seni bina Aarch64 dan AMD64.

Koleksi campuran yang boleh ditinggalkan untuk pengutip sampah G1

Java 12 menjadikan koleksi campuran G1 dibatalkan sekiranya mungkin melebihi sasaran jeda. Matlamat G1 adalah untuk memenuhi sasaran masa jeda yang disediakan pengguna untuk jeda pengumpulannya.

Sebelum ini, mesin analisis lanjutan memilih jumlah kerja yang harus dilakukan semasa pengumpulan. Hasilnya adalah sekumpulan wilayah yang dikenal sebagai kumpulan koleksi. Setelah set ditentukan dan pengumpulan dimulakan, G1 mengumpulkan semua benda hidup di kawasan koleksi di semua wilayah tanpa berhenti. Tetapi ini boleh menyebabkan G1 melampaui tujuan jeda-jeda jika heuristik aplikasi memilih kumpulan koleksi yang terlalu besar.

Mekanisme diperlukan untuk mengesan kapan heuristik berulang kali memilih jumlah pekerjaan yang tidak tepat untuk koleksi dan, jika ini terjadi, minta G1 melakukan kerja pengumpulan secara bertahap, di mana koleksi dapat dibatalkan setelah setiap langkah. Mekanisme yang diperkenalkan di Java 12 membolehkan G1 untuk memenuhi matlamat masa jeda lebih kerap.

Pengembalian memori komited yang tidak digunakan dengan segera

Java 12 meningkatkan G1 untuk secara automatik mengembalikan memori timbunan Java ke sistem operasi ketika tidak aktif. Memori ini dilepaskan dalam jangka masa yang wajar apabila terdapat aktiviti aplikasi yang sangat rendah.

Sebelum ini, G1 hanya mengembalikan memori dari timbunan pada pengumpulan sampah penuh atau semasa kitaran serentak. Dengan G1 berusaha menghindari pengumpulan sampah sepenuhnya, hanya mencetuskan kitaran serentak berdasarkan penghunian timbunan dan aktiviti peruntukan, ia tidak akan mengembalikan memori timbunan dalam banyak kes kecuali dipaksa melakukannya secara luaran. Tingkah laku ini merugikan dalam persekitaran kontena di mana sumber daya dibayar dengan penggunaan. Walaupun JVM hanya menggunakan sebahagian kecil memori yang diberikan kerana tidak aktif, G1 mengekalkan timbunan penuh. Oleh itu, pelanggan membayar untuk semua sumber daya sepanjang masa, dan penyedia awan tidak dapat menggunakan sepenuhnya perkakasan mereka.

Dengan Java 12, JVM dapat mengesan tahap penggunaan timbunan dan secara automatik mengurangi penggunaan timbunannya pada waktu itu. 

API pemalar JVM

API ini memodelkan deskripsi nominal fail kelas kunci dan artifak runtime, terutamanya pemalar yang boleh dimuat dari kumpulan tetap. Java 12 mendefinisikan sekelompok jenis rujukan simbolik berdasarkan nilai dalam pakej baru java.lang.invoke.constant, untuk menggambarkan setiap jenis pemalar yang boleh dimuat.

Kumpulan tetap ada di setiap kelas Java, menyimpan arahan operan dan kod bytec di kelas. Entri dalam kumpulan tetap menerangkan sama ada artifak runtime seperti kelas dan kaedah atau nilai sederhana seperti rentetan dan bilangan bulat. Entri ini dikenali sebagai pemalar yang boleh dimuat.

Program yang memanipulasi fail kelas mesti memodelkan arahan bytecode dan seterusnya pemalar yang boleh dimuat. Tetapi menggunakan jenis Java standard untuk memodelkan pemalar yang boleh dimuat tidak mencukupi. Ini mungkin dapat diterima untuk pemalar yang dapat dimuat yang menggambarkan rentetan, tetapi bermasalah untuk pemalar yang dapat dimuat yang menggambarkan kelas, kerana menghasilkan Classobjek "hidup" bergantung pada kebenaran dan konsistensi pemuatan kelas. Pemuatan kelas, bagaimanapun, mempunyai banyak kebergantungan persekitaran dan mod kegagalan.

Oleh itu, program yang menangani pemalar yang boleh dimuat dapat dipermudah sekiranya mereka dapat memanipulasi kelas dan kaedah dan artifak yang kurang dikenali seperti pengendalian kaedah dan pemalar yang dikira secara dinamik dalam bentuk simbolik nominal. Oleh itu API pemalar JVM memberikan perpustakaan dan alat satu kaedah standard untuk menerangkan pemalar yang boleh dimuatkan.

Permulaan, CDS, dan pengumpulan sampah yang lebih baik

Java 12 meningkatkan proses pembuatan JDK untuk menghasilkan arkib perkongsian data kelas lalai (CDS), menggunakan senarai kelas lalai, pada platform 64-bit. Ini meningkatkan masa permulaan yang tidak diingini dan menghilangkan keperluan untuk menjalankan -Xshare:dumpCDS. Proses pembuatan JDK telah diubah untuk dijalankan java-xshare:dumpsetelah menghubungkan gambar.

Pilihan baris perintah tambahan telah disertakan untuk menyempurnakan masa timbunan pengumpulan sampah untuk meningkatkan susun atur memori untuk kes biasa. Pengguna dengan keperluan yang lebih maju, seperti senarai kelas khusus yang merangkumi kelas aplikasi dan konfigurasi pengumpulan sampah yang berbeza, masih dapat membuat arkib CDS khusus.

Pengurangan bilangan port ARM

Java 12 membuang semua sumber yang berkaitan dengan arm64port sambil mengekalkan ARM 32-bit dan 64-bit aarch64. Penyingkiran port ini akan memungkinkan penyumbang memfokuskan usaha pada satu implementasi ARM 64-bit dan menghilangkan kerja pendua yang akan dihasilkan dari penyelenggaraan dua port. Pada masa ini, dua port ARM 64-bit berada di JDK.

Tukar ungkapan

Tukar ekspresi mempermudah pengekodan dengan memperluas switchpernyataan sehingga dapat digunakan sebagai pernyataan atau ungkapan. Ini membolehkan kedua-dua pernyataan dan ungkapan menggunakan skop "tradisional" atau "dipermudah" dan mengawal tingkah laku aliran. Perubahan ini menghasilkan pengekodan "sehari-hari" yang lebih sederhana dan menyiapkan jalan untuk penggunaan padanan corak di switch.

Ketika pembangun Java bergerak untuk mendukung pencocokan pola, penyimpangan switchpernyataan Java  telah menjadi halangan. Ini termasuk tingkah laku aliran kawalan lalai dari blok suis; skop lalai blok suis, di mana blok tersebut dianggap sebagai satu ruang lingkup tunggal; dan beralih berfungsi hanya sebagai penyataan. Reka bentuk switchpernyataan Java semasa mengikuti bahasa-bahasa seperti C ++ dan, secara lalai, menyokong semantik baru. Aliran kawalan ini berguna untuk menulis kod tahap rendah. Tetapi apabila suis digunakan dalam konteks peringkat yang lebih tinggi, sifat ralatnya mulai melebihi fleksibiliti.

Suite penanda aras asas

JDK 12 merangkumi rangkaian asas penanda mikro, yang telah ditambahkan pada kod sumber platform. Tujuannya adalah untuk memudahkan pembangun menjalankan penanda aras yang ada atau membina yang baru.

Cadangan rangkaian microbenchmark, yang dibuat pada bulan Julai 2014 dan dikemas kini pada awal November 2018, disokong oleh Java Microbenchmark Harness (JMH), untuk membina penanda aras yang ditulis dalam bahasa Java dan bahasa JVM lain. Suite ini disusun dengan kod sumber JDK dalam satu direktori, dengan pembangun dapat menambahkan penanda aras baru dengan mudah.

Bukan tujuan untuk menyediakan penanda aras untuk ciri JDK baru atau membuat set penanda aras lengkap yang merangkumi semua yang ada di JDK. Juga perhatikan bahawa suite penanda aras tidak diperlukan untuk binaan JDK biasa tetapi merupakan sasaran binaan yang berasingan. 

Cadangan tersebut meminta penciptaan halaman baru di wiki.openjdk.java.net untuk menjelaskan bagaimana mengembangkan penanda aras dan menerangkan keperluan. Keperluan ini akan mewajibkan kepatuhan pada piawaian pengekodan, prestasi yang dapat dihasilkan semula, dan dokumentasi.

Kemas kini JDK 12

Rancangan memanggil JDK 12 untuk menerima dua kemas kini sebelum digantikan oleh JDK 13 dalam enam bulan. JDK 12 adalah sebahagian daripada irama rilis enam bulan Oracle yang diperkenalkan dengan JDK 9 pada bulan September 2017. JDK 12 disifatkan sebagai pelepasan ciri, tidak seperti JDK 11, yang merupakan pelepasan sokongan jangka panjang dengan sokongan selama beberapa tahun yang dirancang.