一、性能方面的改进
随着硬件的发展,性能一直是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的不同点,从性能、新特性和安全性方面,两个版本在很多方面都有较大的改进和提升。无论是开发人员还是应用程序部署人员,都应该根据自己项目的需要,在两个版本之间选择适合自己的版本,使得开发和部署更加高效、稳定和安全。