一、性能方面的改進
隨著硬體的發展,性能一直是Java開發人員所關心的問題。JDK11在性能方面做出了多個改進,如:
1、G1垃圾回收器的並行非同步Full GC,這意味著Full GC時間顯著縮短;
-XX:+UseG1GC -XX:ParallelGCThreads=4 -XX:ConcGCThreads=4
2、Java 11的JIT代碼生成器具有更好的性能,支持C++的Auto-Vectorization。
-XX:+UseG1GC -XX:ParallelGCThreads=4 -XX:ConcGCThreads=4
3、在Java11中,Nashorn引擎被標記為已過時(deprecated),它曾經是使用JavaScript和Java交互的一個很好的選項,畢竟它是用Java編寫的,因此它是一種天然的選擇。現在,Oracle建議在Java和JavaScript之間使用更強大的橋接機制:JSR223、GraalJS或Rhino。
JDK8在性能方面的改進主要是使用lambda表達式等新特性來提高代碼的運行效率:
List<Person> personList = new ArrayList<Person>();
List<String> nameList = personList.stream()
.filter(person -> person.getAge() > 18)
.map(Person::getName)
.collect(Collectors.toList());
二、新特性的添加和廢除
JDK11相比JDK8,在新特性的添加方面,更突出下面幾點:
1、VAR語法的擴展,在Java11中允許VAR類型推斷在形式參數中使用:
public static void main(String[] args) {
var list = List.of("a", "b", "c");
list.forEach(System.out::println);
}
2、HTTP/2客戶端API(即java.net.http)。Java 11添加了HTTP/2客戶端API(java.net.http),提供了非同步和響應流(Response Stream)的支持。HTTP/2是Web協議的最新版本,它和舊版本HTTP相比,可以使用單一的連接來進行多個並行請求-響應交換,從而避免不必要的延遲和減小網路通信的負載。
3、針對Java 8中時間API的不足,Java 11增強了時間API,
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
而JDK8添加了Stream API、Lambda Expression、Method Reference、Optional類等新特性,讓開發更加高效,例如:
List<Person> personList = new ArrayList<Person>();
List<String> nameList = personList.stream()
.filter(person -> person.getAge() > 18)
.map(Person::getName)
.collect(Collectors.toList());
三、安全性方面的改進
JDK11在安全方面還加強了:OpenJDK中增加了TLS1.3協議,提高了加密的安全性和效率。
System.setProperty("jdk.tls.client.protocols", "TLSv1.3");
而JDK8中針對幾個已知的Java安全漏洞進行了修復,增強了Java安全的性能和穩定性,增強了ClassLoader的安全模式,提供了SSL的加密傳輸支持和Crypto API。
總結
以上是JDK8和JDK11的不同點,從性能、新特性和安全性方面,兩個版本在很多方面都有較大的改進和提升。無論是開發人員還是應用程序部署人員,都應該根據自己項目的需要,在兩個版本之間選擇適合自己的版本,使得開發和部署更加高效、穩定和安全。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/194704.html