Fitur Baru Java 10

Artikel ini adalah bagian dari serial: • Java 10 LocalVariable Type-Inference

• Peningkatan Kinerja Java 10

• Fitur Baru Java 10 (artikel saat ini)

1. Perkenalan

JDK 10 yang merupakan implementasi dari Java SE 10 dirilis pada 20 Maret 2018.

Dalam artikel ini, kami akan membahas dan menjelajahi fitur dan perubahan baru yang diperkenalkan di JDK 10.

2. Inferensi Jenis Variabel Lokal

Ikuti tautan untuk artikel mendalam tentang fitur ini:

Inferensi Jenis Variabel Lokal Java 10

3. Koleksi yang Tidak Dapat Dimodifikasi

Ada beberapa perubahan terkait koleksi yang tidak dapat dimodifikasi di Java 10.

3.1. salinan dari()

java.util.List , java.util.Map dan java.util.Set masing-masing mendapat copyOf (Collection) metode statis baru .

Ini mengembalikan salinan Koleksi yang diberikan yang tidak dapat dimodifikasi :

@Test(expected = UnsupportedOperationException.class) public void whenModifyCopyOfList_thenThrowsException() { List copyList = List.copyOf(someIntList); copyList.add(4); }

Setiap upaya untuk mengubah koleksi seperti itu akan mengakibatkan pengecualian waktu proses java.lang.UnsupportedOperationException .

3.2. toUnmodifiable * ()

java.util.stream.Collectors mendapatkan metode tambahan untuk mengumpulkan Aliran ke Daftar , Peta , atau Set yang tidak dapat dimodifikasi :

@Test(expected = UnsupportedOperationException.class) public void whenModifyToUnmodifiableList_thenThrowsException() { List evenList = someIntList.stream() .filter(i -> i % 2 == 0) .collect(Collectors.toUnmodifiableList()); evenList.add(4); }

Setiap upaya untuk mengubah koleksi seperti itu akan mengakibatkan pengecualian waktu proses java.lang.UnsupportedOperationException .

4. Opsional * .orElseThrow ()

java.util.Optional , java.util.OptionalDouble , java.util.OptionalInt dan java.util.OptionalLong masing-masing mendapat metode baru orElseThrow () yang tidak mengambil argumen dan melempar NoSuchElementException jika tidak ada nilai hadir:

@Test public void whenListContainsInteger_OrElseThrowReturnsInteger() { Integer firstEven = someIntList.stream() .filter(i -> i % 2 == 0) .findFirst() .orElseThrow(); is(firstEven).equals(Integer.valueOf(2)); }

Ini identik dengan dan sekarang menjadi alternatif yang disukai untuk metode get () yang ada.

5. Peningkatan Kinerja

Ikuti tautan untuk artikel mendalam tentang fitur ini:

Peningkatan Kinerja Java 10

6. Kesadaran Kontainer

JVM sekarang sadar sedang dijalankan di kontainer Docker dan akan mengekstrak konfigurasi khusus kontainer alih-alih menanyakan sistem operasi itu sendiri - ini berlaku untuk data seperti jumlah CPU dan total memori yang telah dialokasikan ke kontainer.

Namun, dukungan ini hanya tersedia untuk platform berbasis Linux. Dukungan baru ini diaktifkan secara default dan dapat dinonaktifkan di baris perintah dengan opsi JVM:

-XX:-UseContainerSupport

Selain itu, perubahan ini menambahkan opsi JVM yang menyediakan kemampuan untuk menentukan jumlah CPU yang akan digunakan JVM:

-XX:ActiveProcessorCount=count

Selain itu, tiga opsi JVM baru telah ditambahkan untuk memungkinkan pengguna kontainer Docker mendapatkan lebih banyak kendali atas jumlah memori sistem yang akan digunakan untuk Java Heap:

-XX:InitialRAMPercentage -XX:MaxRAMPercentage -XX:MinRAMPercentage

7. Sertifikat Root

Keystore cacerts, yang awalnya kosong sejauh ini, dimaksudkan untuk berisi sekumpulan sertifikat dasar yang dapat digunakan untuk membangun kepercayaan pada rantai sertifikat yang digunakan oleh berbagai protokol keamanan.

Akibatnya, komponen keamanan penting seperti TLS tidak berfungsi secara default di bawah build OpenJDK.

Dengan Java 10, Oracle memiliki sumber terbuka sertifikat akar di program Java SE Root CA Oracle untuk membuat OpenJDK build lebih menarik bagi pengembang dan untuk mengurangi perbedaan antara build tersebut dan build Oracle JDK.

8. Penghentian dan Penghapusan

8.1. Opsi dan Alat Baris Perintah

Alat javah telah dihapus dari Java 10 yang menghasilkan header C dan file sumber yang diperlukan untuk mengimplementasikan metode asli - sekarang, javac -h dapat digunakan sebagai gantinya.

policytool adalah alat berbasis UI untuk pembuatan dan pengelolaan file kebijakan. Ini sekarang telah dihapus. Pengguna dapat menggunakan editor teks sederhana untuk melakukan operasi ini.

Opsi java -Xprof telah dihapus . Opsi ini digunakan untuk membuat profil program yang sedang berjalan dan mengirim data profil ke output standar. Pengguna sekarang harus menggunakan alat jmap sebagai gantinya.

8.2. Lebah

Paket java.security.acl yang tidak digunakan lagi telah ditandai untukRemoval = true dan dapat dihapus dalam versi Java SE mendatang. Ini telah digantikan oleh java.security.Policy dan kelas terkait.

Demikian pula, java.security. {Certificate, Identity, IdentityScope, Signer} API ditandai untukRemoval = true .

9. Versi Rilis Berbasis Waktu

Starting with Java 10, Oracle has moved to the time-based release of Java. This has following implications:

  1. A new Java release every six months. The March 2018 release is JDK 10, the September 2018 release is JDK 11, and so forth. These are called feature releases and are expected to contain at least one or two significant features
  2. Support for the feature release will last only for six months, i.e., until next feature release
  3. Long-term support release will be marked as LTS. Support for such release will be for three years
  4. Java 11 will be an LTS release

java -version will now contain the GA date, making it easier to identify how old the release is:

$ java -version openjdk version "10" 2018-03-20 OpenJDK Runtime Environment 18.3 (build 10+46) OpenJDK 64-Bit Server VM 18.3 (build 10+46, mixed mode)

10. Conclusion

In this article, we saw the new features and changes brought in by Java 10.

Seperti biasa, potongan kode dapat ditemukan di GitHub.

« Sebelumnya Peningkatan Kinerja Java 10