当前位置:   article > 正文

我们为什么要升级到JDK17

我们为什么要升级到JDK17

一、JDK8到JDK17的变化

1、说明JDK版本的类型

1)长期支持版本:

LTS(long term support),例如:jdk11、jdk17、jdk21等。

2)短期支持版本:

中间版本,支持时间较短,例如:jdk14、jdk15等,这类版本一般使用人数较少。

2、介绍JDK8到JDK17的变化

1)JDK8 2014年发布,支持到2030年

主要新特性:

  • Lambda表达式:允许以更简洁的方式编写匿名函数,提升了代码的简洁性和可读性。
  • Stream API:提供了一套用于处理集合和数组的新API,支持并行处理,提高了数据处理的效率。
  • 函数式接口:只包含一个抽象方法的接口,可以被隐式转换为Lambda表达式。
  • 默认方法:允许在接口中添加方法的默认实现,而不会破坏现有的实现类。
  • 方法引用:允许直接引用已存在的方法或构造器,而不是通过Lambda表达式来描述行为。
  • 新的日期和时间API:提供了更简单易用的日期和时间处理类,替代了旧的Date和Calendar类。
  • 其他改进:包括重复注解、JVM内部使用MetaSpace代替永久代等。
2)JDK9 2017年发布 

主要新特性:

  • 接口私有方法:接口中的方法可以使用private修饰。
  • G1垃圾收集器成为默认:提高了垃圾收集的效率。
  • HTTP/2和WebSocket的客户端API:支持更现代的网络协议。
3)JDK10 2018年发布 

主要新特性

  • 局部变量类型推断:引入var关键字,允许在局部变量声明时不显式指定类型,编译器会根据右侧表达式自动推断类型。
  • 并行Full GC:优化了G1垃圾收集器的性能。
  • 其他改进:包括线程局部句柄的回调等。
4)JDK11 2018年发布,LTS版本,支持到2026年 

主要新特性:

  • 垃圾收集器优化;
  • HTTP客户端API;
  • 局部变量类型推断;
  • 模块化系统;
  • Unicode 10支持;
  • 安全性增强;
5)JDK12 2019年发布,短期版本

主要新特性

  • Shenandoah GC:一种新的垃圾收集器,旨在降低停顿时间。
  • switch表达式:增强了switch语句的功能,允许其有返回值。
  • G1收集器的优化:提高了GC的效率。
6)JDK13  2019年发布,短期版本

主要新特性

  • ZGC优化:进一步提高了ZGC垃圾收集器的性能。
  • 文本块:允许使用三个双引号表示文本块,简化了字符串的书写。
  • 其他改进:包括Socket底层实现的优化等。
7)JDK14 2020年发布,短期版本

主要新特性

  • instanceof类型匹配语法简化:允许在instanceof操作中直接声明变量。
  • record类:一种简化的数据类,自动生成构造器、equals、hashCode等方法。
  • NullPointerException打印优化:改进了空指针异常的打印信息,便于调试。
8)JDK15  2020年发布,短期版本

主要新特性

  • 隐藏类(Hidden Classes):允许创建不被类加载器直接管理的类。
  • 密封类(Sealed Classes):限制哪些类可以继承一个类,提高了类的封装性。
9)JDK 16(2021年发布)

主要新特性

  • instanceof模式匹配:增强了instanceof的功能,允许在检查类型的同时进行类型转换。
  • ZGC性能优化:继续优化ZGC垃圾收集器的性能。
  • record类的正式引入:在JDK 14预览的基础上正式引入record类。
10)JDK 17(2021年发布)

主要新特性

  • 密封类(Sealed Classes)的正式引入:进一步增强了类的封装性和安全性。
  • 性能提升:对JVM和垃圾收集器进行了多项优化,提高了应用程序的响应速度和吞吐量。
  • 安全性增强:引入了新的安全功能和协议支持,提高了应用程序的安全性。
  • 更好的开发体验:提供了更好的开发工具和库支持,包括调试、分析和可视化工具等。

二、JDK17中的重点新增功能

1、发布时间:2021年9月14日

2、支持时间:支持到2029年9月

3、特性介绍及示例

1)性能提升

JDK 17对性能进行了多方面的优化,包括垃圾回收、编译器和内存模型等方面。这些优化旨在提高应用程序的响应速度和吞吐量。可以通过运行如下代码,体验性能方面的提升,可以对比jdk8 和jdk17的运行结果

  1. // 假设这是一个性能敏感的操作,比如处理大量数据
  2. public void processData(List<Integer> data) {
  3. for (int i = 0; i < data.size(); i++) {
  4. // 复杂的计算或数据处理
  5. int result = calculateSomething(data.get(i));
  6. // ...
  7. }
  8. }
  9. private int calculateSomething(int input) {
  10. // 这里模拟复杂的计算
  11. return input * input + input % 5;
  12. }
2) 安全性增强

JDK 17引入了新的安全功能,如密码套件升级、TLSv1.3支持和安全协议的默认启用等。这些功能有助于增强应用程序的安全性,防止恶意攻击。同时,在JDK17中也增强了https,示例代码如下:

  1. import java.net.http.HttpClient;
  2. import java.net.http.HttpRequest;
  3. import java.net.http.HttpResponse;
  4. import java.net.URI;
  5. import java.io.IOException;
  6. public class SecureHttpClient {
  7. public static void main(String[] args) throws IOException, InterruptedException {
  8. HttpClient client = HttpClient.newHttpClient();
  9. HttpRequest request = HttpRequest.newBuilder()
  10. .uri(URI.create("https://example.com"))
  11. .GET()
  12. .build();
  13. HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
  14. System.out.println(response.statusCode());
  15. System.out.println(response.body());
  16. }
  17. }
3)更好的开发体验

JDK 17提供了更好的开发工具和库,包括对调试、分析和可视化工具的支持。这些工具可以帮助开发人员更高效地进行应用程序开发和调试。

4)面向未来的技术

JDK 17支持新的编程语言和框架,包括Java平台标准版(Java SE)和JavaFX等。这些技术可以帮助开发人员更好地适应不断变化的市场需求和技术趋势。以下是使用JDK 17中增强的switch表达式(模式匹配)的示例:

  1. public class SwitchPatternMatchingExample {
  2. public static void testSwitch(Object o) {
  3. String result = switch (o) {
  4. case String s && s.length() > 0 -> "Non-empty string: " + s;
  5. case Integer i -> "Integer: " + i;
  6. case null -> "Null value";
  7. default -> "Unknown
5)模式匹配(Preview)

Switch表达式的增强:Java 17为switch语句引入了模式匹配(预览特性),允许在switch语句中使用更复杂的表达式和模式匹配,使代码更加简洁和易于理解。

  1. // Java 17及更高版本(预览特性)
  2. public static void testSwitchPatternMatching(Object o) {
  3. String result = switch (o) {
  4. case Integer i -> "Integer: " + i;
  5. case String s -> "String: " + s;
  6. default -> "Unknown type";
  7. };
  8. System.out.println(result);
  9. }
6)其它特性介绍
  • Sealed类和接口:使用sealed关键字来修饰类或接口,限制只有特定的类可以扩展或实现。这有助于控制类的继承层次结构,提高代码的安全性和可靠性。
  • Strong Encapsulation for JDK Internals:引入更强大的内部类封装,限制对JDK内部API的访问和使用,以防止不正确的使用和破坏API的行为。
  • New macOS Rendering Pipeline:引入了一个新的用于macOS的渲染管道Metal,取代了Quartz渲染管道,提供更现代、更高效的图形渲染能力。

三、总结: 

1、从JDK8到JDK17,Java在语法、API、性能、安全性和开发工具等方面都进行了大量的改进和增强,为Java开发人员提供了更加丰富和强大的编程能力。

2、JDK 17是一个功能丰富的Java版本,它带来了性能提升、安全性增强、更好的开发体验和面向未来的技术特性。通过使用这些新特性,开发人员可以编写更高效、更安全、更易于维护的Java应用程序。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/972741
推荐阅读
相关标签
  

闽ICP备14008679号