您的位置:

JDK8和JDK11的区别

一、性能方面的改进

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