Ciri-ciri Baru Java 10

Artikel ini adalah sebahagian daripada siri: • Java 10 Local-Variable Type-Inference

• Peningkatan Prestasi Java 10

• Java 10 Ciri Baru (artikel semasa)

1. Pengenalan

JDK 10, yang merupakan implementasi Java SE 10, dirilis pada 20 Mac 2018.

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

2. Inferens Jenis Pembolehubah Tempatan

Ikuti pautan untuk artikel mendalam mengenai ciri ini:

Inferens Jenis Pembolehubah Tempatan Java 10

3. Koleksi Tidak Boleh Diubah

Terdapat beberapa perubahan yang berkaitan dengan koleksi yang tidak dapat diubah di Java 10.

3.1. copyOf ()

java.util.List , java.util.Map dan java.util.Set masing-masing mendapat copyOf kaedah statik baru (Koleksi) .

Ia mengembalikan salinan Koleksi yang tidak dapat diubah :

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

Sebarang percubaan untuk mengubah koleksi sedemikian akan mengakibatkan pengecualian java.lang.UnsupportedOperationException runtime.

3.2. hingga Tidak Boleh Diubah * ()

java.util.stream.Collectors mendapatkan kaedah tambahan untuk mengumpulkan Stream ke dalam Daftar , Peta atau Set yang tidak dapat diubah :

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

Sebarang percubaan untuk mengubah koleksi sedemikian akan mengakibatkan pengecualian java.lang.UnsupportedOperationException runtime.

4. Pilihan * .atauElseThrow ()

java.util.Optional , java.util.OptionalDouble , java.util.OptionalInt dan java.util.OptionalLong masing-masing mendapat kaedah baru atauElseThrow () yang tidak mengambil sebarang hujah dan melemparkan NoSuchElementException jika tiada nilai yang ada:

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

Ia sinonim dengan dan kini menjadi alternatif pilihan untuk kaedah get () yang ada .

5. Peningkatan Prestasi

Ikuti pautan untuk artikel mendalam mengenai ciri ini:

Peningkatan Prestasi Java 10

6. Kesedaran Kontena

JVM sekarang sedar dijalankan dalam wadah Docker dan akan mengekstrak konfigurasi khusus kontena dan bukannya meminta sistem operasi itu sendiri - ia berlaku untuk data seperti jumlah CPU dan memori total yang telah dialokasikan ke kontena.

Walau bagaimanapun, sokongan ini hanya tersedia untuk platform berasaskan Linux. Sokongan baru ini diaktifkan secara lalai dan boleh dilumpuhkan pada baris perintah dengan pilihan JVM:

-XX:-UseContainerSupport

Juga, perubahan ini menambah pilihan JVM yang memberikan kemampuan untuk menentukan jumlah CPU yang akan digunakan JVM:

-XX:ActiveProcessorCount=count

Juga, tiga pilihan JVM baru telah ditambahkan untuk membolehkan pengguna kontainer Docker mendapatkan kawalan yang lebih baik terhadap jumlah memori sistem yang akan digunakan untuk Java Heap:

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

7. Sijil Akar

The cacerts keystore, which was initially empty so far, is intended to contain a set of root certificates that can be used to establish trust in the certificate chains used by various security protocols.

As a result, critical security components such as TLS didn't work by default under OpenJDK builds.

With Java 10, Oracle has open-sourced the root certificates in Oracle's Java SE Root CA program in order to make OpenJDK builds more attractive to developers and to reduce the differences between those builds and Oracle JDK builds.

8. Deprecations and Removals

8.1. Command Line Options and Tools

Tool javah has been removed from Java 10 which generated C headers and source files which were required to implement native methods – now, javac -h can be used instead.

policytool was the UI based tool for policy file creation and management. This has now been removed. The user can use simple text editor for performing this operation.

Removed java -Xprofoption. The option was used to profile the running program and send profiling data to standard output. The user should now use jmap tool instead.

8.2. APIs

Deprecated java.security.acl package has been marked forRemoval=true and is subject to removal in a future version of Java SE. It's been replaced by java.security.Policy and related classes.

Similarly, java.security.{Certificate,Identity,IdentityScope,Signer} APIs are marked forRemoval=true.

9. Time-Based Release Versioning

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, coretan kod boleh didapati di GitHub.

« Peningkatan Prestasi Java 10 sebelumnya