目录
JDK版本总览
序号 | 版本 | 时间 |
---|---|---|
1 | JDK 1.1 | 1997 |
2 | JDK 1.2 | 1998 |
3 | JDK 1.3 | 2000 |
4 | JDK 1.4 | 2002 |
5 | JDK 5.0 | 2004 |
6 | JDK 6 | 2006 |
7 | JDK 7 | 2011 |
8 | JDK 8 | 2014 |
9 | JDK 9 | 2017 |
10 | JDK 10 | 2018 |
11 | JDK 11 | 2018 |
12 | JDK 12 | 2019 |
13 | JDK 13 | 2019 |
14 | JDK 14 | 2020 |
15 | JDK 15 | 2020 |
16 | JDK 16 | 2021 |
17 | JDK 17 | 2021 |
1、JDK1.1(1997)
JDK 1.1(Java Development Kit 1.1)是Java平台的第一个正式版本,于1997年发布。虽然它是Java的初始版本之一,但相对于后续版本,它引入的新特性相对较少。以下是JDK 1.1版本的一些新功能和改进:
- AWT(Abstract Window Toolkit): JDK 1.1引入了AWT,这是Java的图形用户界面(GUI)库。AWT提供了创建窗口、按钮、文本框等GUI组件的功能,使Java应用程序能够具有图形界面。
- 内部类(Inner Classes): JDK 1.1引入了内部类,它允许在一个类的内部定义另一个类。内部类具有访问外部类成员的特权,可以更轻松地实现封装和组件化。
- JAR文件格式: JDK 1.1引入了JAR文件格式(Java Archive),用于将多个Java类文件和相关资源打包成一个可执行的JAR文件。JAR文件可以方便地分发和部署Java应用程序。
- 反射(Reflection): JDK 1.1引入了反射机制,允许程序在运行时获取类的信息、调用方法和访问字段。这为一些高级特性和工具(如JavaBeans)的实现提供了基础。
垃圾回收(Garbage Collection): JDK 1.1引入了更高效的垃圾回收算法,以提高Java程序的性能和内存管理。
JDBC(Java Database Connectivity): JDK 1.1引入了JDBC,这是用于Java与数据库通信的API。JDBC允许Java应用程序连接到不同类型的数据库并执行SQL查询。
RMI(Remote Method Invocation): JDK 1.1引入了RMI,这是一种用于远程调用Java对象方法的机制。它允许分布式系统中的Java对象相互通信。
2、JDK 1.2(1998)
JDK 1.2(Java Development Kit 1.2),也被称为Java 2,于1998年发布,引入了许多重要的新功能和改进,使Java编程语言更加强大和功能丰富。以下是JDK 1.2版本的一些主要新功能:
Swing GUI库: JDK 1.2引入了Swing,这是一个新的Java图形用户界面(GUI)库。Swing提供了轻量级的组件,比AWT更具表现力和可定制性。它引入了窗体、按钮、标签、表格等新组件,为Java应用程序提供了更现代的外观和感觉。
集合框架(Collections Framework): JDK 1.2引入了集合框架,它提供了一组用于操作和管理数据集合的类和接口。这包括List、Set、Map等数据结构,使数据操作更加方便和高效。
JDBC 2.0: Java Database Connectivity(JDBC) 2.0在JDK 1.2中引入了更多的功能,包括批处理操作、连接池、可滚动结果集等。
内部ization(国际化): JDK 1.2引入了对国际化的更好支持。它引入了新的国际化和本地化API,以便开发者能够轻松地创建多语言和多区域的应用程序。
反射的增强: 反射机制在JDK 1.2中得到增强,允许开发者更容易地获取和操作类的信息,包括方法、字段、注解等。
强制类型转换(Casting): JDK 1.2引入了强制类型转换,允许开发者将一个对象强制转换为另一种类型,以便进行更灵活的编程。
Java Naming and Directory Interface(JNDI): JDK 1.2引入了JNDI,用于在分布式环境中查找和访问命名和目录服务,如LDAP(轻量级目录访问协议)。
反向布局管理器(LayoutManager): JDK 1.2引入了更多的布局管理器,使开发者能够更灵活地管理Swing GUI组件的布局。
改进的事件处理: JDK 1.2引入了更多的事件处理功能,包括内部事件监听器、事件适配器等。
Java 2D API: JDK 1.2引入了Java 2D API,允许开发者创建2D图形和图像处理应用程序。
Jar文件的Pack200压缩: JDK 1.2引入了Pack200工具,用于对Jar文件进行更高效的压缩,以减小应用程序的下载尺寸。
JDK 1.2的引入使Java平台更加强大,适用于更广泛的应用领域,包括图形应用、企业级应用、数据库应用等。它标志着Java的发展进程,为后续版本的Java提供了坚实的基础。
3、JDK 1.3(2000)
JDK 1.3(Java Development Kit 1.3)于2000年发布,引入了许多新功能和改进,以进一步增强Java编程语言和平台的功能和性能。以下是JDK 1.3版本的一些主要新功能和改进:
HotSpot虚拟机: JDK 1.3引入了HotSpot虚拟机,这是一种高性能的Java虚拟机,用于改进Java应用程序的执行速度和内存管理。HotSpot虚拟机在后续版本中得到了进一步的优化和改进。
Java Naming and Directory Interface(JNDI)的增强: JDK 1.3扩展了JNDI,引入了更多的功能,使Java应用程序能够更容易地与命名和目录服务进行交互。
Java Platform Debugger Architecture(JPDA): JDK 1.3引入了JPDA,它是一种用于Java调试的架构。JPDA允许开发者使用调试器检查和调试Java应用程序的运行时状态。
Java Sound API: JDK 1.3引入了Java Sound API,允许开发者在Java应用程序中进行音频处理和播放。
Java Naming and Directory Interface for the Service Provider Interface(JNDI SPI): JDK 1.3引入了JNDI SPI,这是一种扩展JNDI的机制,允许开发者创建自定义的JNDI提供程序以访问各种命名和目录服务。
Java Secure Socket Extension (JSSE): JDK 1.3引入了JSSE,用于提供加密和安全套接字通信的API。它允许Java应用程序进行加密通信,确保数据的安全性和隐私性。
Java Authentication and Authorization Service (JAAS): JDK 1.3引入了JAAS,用于身份验证和授权的API。它允许开发者实现安全的用户身份验证和访问控制。
RMI-IIOP: JDK 1.3引入了RMI-IIOP,这是RMI(Remote Method Invocation)的扩展,支持使用CORBA(Common Object Request Broker Architecture)进行分布式通信。
Java Platform Debugger Architecture (JPDA): JDK 1.3引入了JPDA,提供了一种用于Java程序调试的框架,包括Java虚拟机工具接口(JVMTI)和Java虚拟机调试接口(JVMDI)。
其他改进: JDK 1.3还包括许多其他改进,如性能优化、Bug修复、新的工具和API等,以提高Java平台的稳定性和可用性。
JDK 1.3的引入进一步扩展了Java平台的功能,增加了更多用于开发企业级和分布式应用程序的工具和API。这些改进使Java成为一种更强大、更灵活和更可靠的编程语言和平台。
4、JDK 1.4(2002)
JDK 1.4(Java Development Kit 1.4),也被称为Java 2 Platform, Standard Edition 1.4,于2002年发布,引入了许多新功能和改进,以进一步增强Java编程语言和平台的功能和性能。以下是JDK 1.4版本的一些主要新功能和改进:
正则表达式(Regular Expressions): JDK 1.4引入了正则表达式支持,通过
java.util.regex
包提供了强大的正则表达式功能,用于文本处理和模式匹配。集合框架的增强: JDK 1.4扩展了集合框架,引入了新的集合类,如
LinkedHashMap
和LinkedHashSet
,以及Collections类中的新方法,如Collections.sort
。异常链(Exception Chaining): JDK 1.4引入了异常链,允许在一个异常中包含其他异常信息,以帮助调试和错误处理。
断言(Assertions): JDK 1.4引入了断言机制,允许开发者在代码中插入断言语句,以检查程序的预期状态,并在断言失败时引发
AssertionError
异常。NIO(New I/O): JDK 1.4引入了NIO,这是一种新的I/O(输入/输出)机制,提供了更灵活、更高效的文件和网络I/O操作。
XML解析: JDK 1.4引入了内置的XML解析器,如
javax.xml.parsers
包,以便于处理和分析XML文档。日志(Logging): JDK 1.4引入了
java.util.logging
包,用于实现基本的日志记录功能,允许开发者记录应用程序的运行时信息。强制类型转换(Casting)的改进: JDK 1.4引入了泛型以及相关的强制类型转换,允许更安全和类型安全的编程。
Java Web Start: JDK 1.4引入了Java Web Start,这是一种用于启动和部署Java应用程序的机制,允许从Web浏览器中启动应用程序。
安全性改进: JDK 1.4引入了许多安全性改进,包括改进的安全管理器和权限模型,以增强Java应用程序的安全性。
JDBC 3.0: Java Database Connectivity(JDBC) 3.0在JDK 1.4中引入了新特性,如可滚动结果集、批处理操作等。
改进的性能: JDK 1.4包括许多性能优化,包括垃圾回收和JIT(Just-In-Time)编译器的改进,以提高Java应用程序的性能。
其他改进: JDK 1.4还包括许多其他改进,如增加的API、新的工具、Bug修复等,以提高Java平台的稳定性和可用性。
JDK 1.4的引入进一步增强了Java平台的功能,使其更适用于各种应用程序和领域,包括企业级应用、Web应用、桌面应用和嵌入式系统。这些新功能和改进为Java开发人员提供了更多工具和功能,以简化开发和提高性能。
5、JDK 1.5 (2004)
JDK 1.5,也称为Java 5或Java 1.5,于2004年发布,引入了许多重要的新功能和语言增强,使Java编程语言更加强大、表达力更丰富。以下是JDK 1.5版本的一些主要新功能和改进:
- 泛型(Generics): 泛型引入了类型参数,允许开发者编写更通用、类型安全的代码。它允许在集合、类和方法中使用类型参数,提高了代码的可读性和安全性。
List<String> names = new ArrayList<>(); names.add("Alice"); names.add("Bob");
- 增强的
for
循环: JDK 1.5引入了增强的for
循环,也称为foreach循环,用于遍历集合和数组。for (String name : names) { System.out.println(name); }
- 自动装箱和拆箱(Autoboxing and Unboxing): JDK 1.5引入了自动装箱和拆箱,允许原始数据类型和其对应的包装类之间的隐式转换。
Integer i = 42; // 自动装箱 int j = i; // 自动拆箱
- 枚举(Enums): JDK 1.5引入了枚举类型,允许开发者创建具有固定常量值的枚举类型。
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
- 静态导入(Static Import): 静态导入允许开发者在代码中直接使用静态成员,而不需要使用类名限定符。
import static java.lang.Math.*; double result = sqrt(25.0);
- 可变参数(Varargs): JDK 1.5引入了可变参数,允许方法接受不定数量的参数,简化了方法的定义和调用。
public void printNumbers(int... numbers) { for (int num : numbers) { System.out.println(num); } }
- 注解(Annotations): 注解允许开发者在代码中添加元数据信息,用于编译时和运行时处理。Java 5引入了自定义注解和元注解(用于注解其他注解)。
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value(); }
枚举集合(EnumSet和EnumMap): JDK 1.5引入了EnumSet和EnumMap,这些集合类专门用于处理枚举类型。
格式化字符串(Formatted Strings): 引入了
printf
和format
方法,以及String.format
,用于更灵活地格式化字符串。System.out.printf("Hello, %s! You are %d years old.%n", name, age);
并发工具(Concurrent Utilities): JDK 1.5引入了
java.util.concurrent
包,提供了并发编程的工具,如锁、线程池、并发集合等。
这些新功能和语言增强使Java编程更加简单、安全和高效。它们为Java开发者提供了更多工具和技术,以应对各种应用程序的需求,从简单的脚本到大规模的企业级应用。
6、JDK1.6(2006)
JDK 1.6(也称为Java 6或Java SE 6)于2006年发布,引入了许多新功能、改进和性能优化。以下是JDK 1.6版本的一些主要新功能和改进:
脚本引擎(Scripting Engine): JDK 1.6引入了Java Compiler API和相关的脚本引擎API,允许在Java应用程序中嵌入和执行脚本语言,如JavaScript、Groovy和其他脚本语言。
Pluggable Annotations(可插拔注解): JDK 1.6引入了可插拔注解处理器API,允许开发者创建自定义的注解处理器,用于生成代码、验证代码或执行其他与注解相关的任务。
桌面应用增强: JDK 1.6引入了许多改进,包括支持系统托盘、改进的AWT和Swing组件、更好的平台集成等,使得开发桌面应用程序更容易。
性能优化: JDK 1.6包括了对Java虚拟机(JVM)的性能优化,包括改进的JIT编译器、垃圾回收器的改进等,以提高Java应用程序的性能和响应速度。
Web服务增强: JDK 1.6引入了JAX-WS(Java API for XML Web Services)2.0,用于开发和部署Web服务应用程序。
JDBC 4.0: Java Database Connectivity(JDBC)4.0在JDK 1.6中引入,包括自动加载数据库驱动程序、更简单的连接管理、更多的SQL类型支持等。
XML支持: JDK 1.6增强了XML处理功能,包括内置的XML解析器、改进的XPath和XSLT支持等。
JConsole监视工具: JDK 1.6引入了JConsole,这是一个监视和管理Java应用程序的工具,允许开发者监控堆内存、线程、性能等方面的信息。
改进的垃圾回收: JDK 1.6包括了改进的垃圾回收算法,如G1(Garbage-First)垃圾回收器,以提高内存管理的效率和性能。
Java Compiler API: JDK 1.6引入了Java Compiler API,允许开发者在运行时动态编译Java源代码,并将其加载到JVM中执行。
这些新功能和改进使Java 6成为一个更强大、更高效、更易于开发和维护的平台。它为Java开发人员提供了更多的工具和技术,以满足不断变化的应用程序需求。此外,JDK 1.6是一个LTS(长期支持)版本,提供了更长时间的支持和维护。
7、JDK 1.7(2011)
JDK 1.7(也称为Java 7或Java SE 7)于2011年发布,引入了许多新功能、改进和性能优化。以下是JDK 1.7版本的一些主要新功能和改进:
- 语言增强(Language Enhancements):
一、钻石操作符(Diamond Operator): 允许在泛型类的实例化时省略泛型类型,使代码更简洁。
二、字符串类型的switch语句: 允许在switch语句中使用字符串。
三、自动关闭资源(Automatic Resource Management): 引入了try-with-resources语句,用于自动关闭资源,如文件、网络连接等。
四、多异常捕获(Multiple Exception Handling): 允许在一个catch块中捕获多个异常类型。
- NIO 2.0(New I/O): 引入了NIO 2.0,增加了对文件系统操作的支持,包括文件复制、移动、删除等。
Fork/Join框架: 引入了Fork/Join框架,用于并行处理任务,特别适用于多核处理器。
动态语言支持(Dynamic Language Support): 引入了InvokeDynamic指令,用于支持动态语言的运行时优化。
新的垃圾回收器(Garbage Collectors): 引入了G1(Garbage-First)垃圾回收器,以提供更好的垃圾回收性能和可预测性。
Concurrent Collections: 引入了并发集合,如ConcurrentHashMap,用于支持多线程并发访问。
对注解的增强(Annotations Enhancements): 允许注解用于更多的程序元素,如局部变量、构造方法、方法的异常声明等。
新的I/O和NIO类: 引入了新的I/O和NIO类,如文件系统操作类(Files类)、异步通道类(AsynchronousChannel)、套接字选项类等。
改进的并发工具: 引入了新的并发工具,如CountDownLatch、Phaser、Exchanger等,以简化多线程编程。
支持新的硬件体系结构: JDK 1.7增加了对新的硬件体系结构的支持,包括新的指令集扩展和硬件加速。
改进的网络库: JDK 1.7引入了NIO 2.0的改进,支持了非阻塞I/O、新的网络协议等。
Java虚拟机(JVM)性能优化: JDK 1.7包括了对JVM性能的多项改进,以提高应用程序的性能和响应速度。
升级的JDBC: 引入了JDBC 4.1,包括更多的自动化特性和改进。
改进的安全性: JDK 1.7增强了Java的安全性,包括新的加密算法和安全性增强。
这些新功能和改进使Java 7成为一个更强大、更高效、更易于开发和维护的平台。它为Java开发人员提供了更多工具和技术,以满足不断变化的应用程序需求,并提供更好的性能和安全性。
8、JDK 1.8 (2014)
JDK 1.8(也称为Java 8)于2014年发布,引入了许多重要的新功能、改进和语言增强,这些改进使Java编程语言更加现代化、强大和高效。以下是JDK 1.8版本的一些主要新功能和改进:
- Lambda表达式(Lambda Expressions): 引入了Lambda表达式,允许开发者以更紧凑和清晰的方式编写匿名函数,从而更容易实现函数式编程。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(name -> System.out.println(name));
- 函数式接口(Functional Interfaces): JDK 1.8引入了函数式接口,它是一个只有一个抽象方法的接口,用于支持Lambda表达式的使用。
@FunctionalInterface interface MyFunction { int apply(int a, int b); }
- Stream API: 引入了Stream API,用于处理集合数据的功能性编程方式。Stream允许进行过滤、映射、归约等操作。
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().filter(n -> n % 2 == 0).mapToInt(Integer::intValue).sum();
- 默认方法(Default Methods): 允许在接口中添加具有默认实现的方法,以便在不破坏现有实现的情况下扩展接口。
interface MyInterface { void myMethod(); default void myDefaultMethod() { // 默认实现 } }
- 方法引用(Method References): 允许使用已存在的方法作为Lambda表达式的参数,以简化代码。
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); names.forEach(System.out::println);
- 新的日期和时间API(Date and Time API): 引入了
java.time
包,提供了更好的日期和时间处理功能,包括不可变的日期时间对象、时区支持等。LocalDate today = LocalDate.now();
- 新的JavaScript引擎: 引入了Nashorn JavaScript引擎,用于在Java应用程序中执行JavaScript代码。
改进的注解(Annotations): 引入了重复注解和类型注解,以增强注解的灵活性。
新的并发工具: 引入了
CompletableFuture
类,用于更轻松地进行异步编程和并行处理。改进的垃圾回收: 引入了G1垃圾回收器的改进,以提高垃圾回收性能。
改进的类型推断: 引入了目标类型推断,使编译器更好地理解Lambda表达式的目标类型。
其他改进: 包括新的函数式接口、改进的接口默认方法支持、新的方法和类、新的IO/NIO2功能、安全性增强等。
JDK 1.8的引入使Java编程语言更加现代化,提供了更多的工具和语言特性,以支持函数式编程和更简洁的代码编写,同时保持了Java的稳定性和可靠性。这些新功能使Java 8成为一个更强大、更适合现代开发需求的平台。
9、JDK 1.9(2017)
JDK 1.9(也称为Java 9)于2017年发布,引入了一些重要的新功能、改进和语言增强,同时也带来了模块化系统的重大变化。以下是JDK 1.9版本的一些主要新功能和改进:
模块系统(Module System): JDK 9引入了模块系统,将代码组织为模块,以便更好地管理和解决依赖关系。这有助于减少类路径问题、提高代码的可维护性和可扩展性。
模块化标准库(Modularized Standard Library): JDK 9将Java标准库划分为模块,使开发者能够更精确地选择需要的模块,减少了应用程序的依赖。
接口私有方法(Private Methods in Interfaces): 允许在接口中定义私有方法,用于实现接口中的公共方法,提高了接口的可维护性和代码复用性。
interface MyInterface { default void myDefaultMethod() { // 公共方法 privateMethod(); } private void privateMethod() { // 私有方法 } }
改进的钻石操作符(Diamond Operator): 允许在匿名类中使用钻石操作符。
List<String> names = new ArrayList<>();
改进的
try-with-resources
语句: 允许在try-with-resources
语句中使用已声明的资源。Resource resource1 = new Resource(); Resource resource2 = new Resource(); try (resource1; resource2) { // 使用资源 }
改进的
@SafeVarargs
注解: 允许在私有静态方法中使用@SafeVarargs
注解。改进的性能和垃圾回收器(Performance and Garbage Collectors): JDK 9包括对性能的改进和G1垃圾回收器的优化。
HTTP 2客户端(HTTP 2 Client): 引入了新的HTTP 2客户端API,允许开发者更高效地处理HTTP请求和响应。
集合工厂方法(Collection Factory Methods): 引入了一些新的工厂方法,用于创建不可变集合对象,如
List.of()
和Set.of()
。List<String> names = List.of("Alice", "Bob", "Charlie");
新的命令行工具(Command Line Tools): 引入了一组新的命令行工具,用于源代码分析、模块管理、javadoc生成等。
改进的
javadoc
工具: 引入了新的HTML5支持、搜索功能和其他改进,提高了文档生成工具的功能。改进的
javac
编译器: 引入了一些编译器改进,以提高代码的性能和稳定性。
这些新功能和改进使JDK 9成为一个更现代化、更强大的Java平台,同时引入了模块化系统,以提高代码的可维护性和依赖管理。需要注意的是,模块系统的引入可能需要开发者进行一些调整,以适应新的模块化编程方式。
10、JDK 10(2018)
JDK 10(也称为Java 10)于2018年发布,虽然相对于之前的版本,它引入的新功能和改进相对较小,但仍然包含了一些有趣的特性。以下是JDK 10版本的一些主要新功能和改进:
- 局部变量类型推断(Local Variable Type Inference): 引入了
var
关键字,允许在局部变量的声明中使用类型推断,减少了冗余的类型声明。var name = "Alice"; // 推断出String类型
- 改进的
Optional
类: 引入了一些新的方法,如orElseThrow()
,以提高Optional
类的实用性。Optional<String> name = Optional.ofNullable(null); name.orElseThrow(() -> new IllegalArgumentException("Name not found"));
- 改进的
CompletableFuture
类: 引入了一些新的方法,如completeAsync()
和orTimeout()
,以支持更灵活的异步编程。CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 42); future.completeAsync(() -> 42, executor);
javap
命令的改进: 引入了-l
和-p
选项,用于显示局部变量表和非公开的类成员。javap -l MyClass javap -p MyClass
改进的垃圾回收器: JDK 10包括了一些垃圾回收器的改进,如G1垃圾回收器的性能优化。
Application Class-Data Sharing(AppCDS): 允许将应用程序类元数据共享,以提高启动和执行应用程序的性能。
Thread-Local Handshakes: 引入了一种轻量级的线程本地握手机制,以减少全局锁的竞争,提高多线程应用程序的性能。
这些新功能和改进虽然不如一些之前版本引入的内容显著,但它们仍然有助于提高Java的可读性、性能和开发体验。局部变量类型推断是一个有趣的特性,可以减少冗余的类型声明,使代码更简洁。此外,改进的垃圾回收器和异步编程工具也为开发人员提供了更多的工具,以优化应用程序的性能。
11、JDK 11(2018.9)
JDK 11于2018年9月发布,是一个LTS(Long-Term Support)版本,提供长期支持,以下是JDK 11版本的一些主要新功能和改进:
- HTTP Client(HTTP客户端): 引入了标准化的HTTP客户端API,支持HTTP/1.1和HTTP/2,并提供了异步和同步请求的支持。
HttpClient httpClient = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://example.com")) .GET() .build(); HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
- 局部变量语法改进: 引入了局部变量语法的改进,允许在
var
声明的同时初始化变量。var name = "Alice"; // 自动推断为String类型
新的垃圾回收器(Garbage Collector): 引入了Epsilon垃圾回收器,它是一种不执行垃圾回收操作的垃圾回收器,用于性能测试和特殊场景。
单元测试工具的改进: 引入了新的单元测试工具JEP 320,使单元测试更易于编写和运行。
动态类文件常量(Dynamic Class-File Constants): 引入了新的字节码指令,允许运行时访问类文件常量池中的常量。
ZGC垃圾回收器稳定版本(Z Garbage Collector): ZGC垃圾回收器从实验性功能转变为稳定版本,用于大堆内存的垃圾回收。
Flight Recorder(飞行记录器): 引入了Flight Recorder工具的开源版本,允许开发者在生产环境中收集性能数据。
新的命令行工具: 引入了一些新的命令行工具,如
jhsdb
(Java HotSpot Debugger)和jfr
(Java Flight Recorder)。Elasticsearch连接器: 引入了用于连接Elasticsearch的新API,以便于Java应用程序访问Elasticsearch集群。
其他改进: JDK 11还包括了许多其他改进,如对安全性、性能、性能监控工具和库的改进。
这些新功能和改进使JDK 11成为一个更稳定、更强大、更安全的版本,特别是由于其LTS性质,使其成为长期支持的选择,适用于需要稳定性和可维护性的应用程序。
12、JDK 12(2019)
JDK 12于2019年发布,是一个短期支持版本(非LTS),相对于之前的LTS版本,它引入的新功能相对较少。以下是JDK 12版本的一些主要新功能和改进:
- Switch表达式(Switch Expressions): 引入了新的
switch
表达式,允许switch
语句作为表达式使用,从而减少冗余代码。int day = 2; String dayType = switch (day) { case 1, 2, 3, 4, 5 -> "Weekday"; case 6, 7 -> "Weekend"; default -> "Invalid"; };
- Compact Number Formatting(紧凑数字格式化): 引入了一种新的API,用于更紧凑地格式化数字,特别适用于国际化。
NumberFormat cf = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); String formatted = cf.format(1000);
新的垃圾回收器(Garbage Collector): 引入了一种新的垃圾回收器,名为
Shenandoah
,旨在减小垃圾回收暂停时间。微基准测试工具(Microbenchmarking): 引入了
Microbenchmark Suite
工具,用于进行微基准测试,帮助开发者优化性能。引入预览特性: JDK 12引入了一些预览特性,如
Switch
表达式和紧凑数字格式化,这些特性处于试验性质,并可供开发者尝试。其他改进: JDK 12还包括了一些性能改进、新的命令行工具、对废弃特性的移除和一些库的改进。
需要注意的是,由于JDK 12是一个短期支持版本,它的主要目标是试验和引入新特性,而不是提供长期支持。因此,一些新特性可能会在后续的LTS版本中稳定下来,而其他特性可能会被改进或移除。开发者应仔细考虑是否使用JDK 12,尤其是在生产环境中。
13、JDK 13(2019.9)
JDK 13于2019年9月发布,是一个非LTS(非长期支持)版本,它引入了一些新功能、改进和实验性特性。以下是JDK 13版本的一些主要新功能和改进:
- Switch表达式增强: 在JDK 12中引入的
switch
表达式在JDK 13中进一步增强,允许使用yield
关键字来返回值。int result = switch (day) { case 1, 2, 3, 4, 5 -> { System.out.println("Weekday"); yield 42; } case 6, 7 -> { System.out.println("Weekend"); yield 0; } default -> throw new IllegalArgumentException("Invalid"); };
- 新的字符串方法: 引入了一些新的字符串方法,如
String::strip()
、String::stripLeading()
、String::stripTrailing()
,用于去除字符串的空白字符。String text = " Hello, World! "; String stripped = text.strip();
ZGC垃圾回收器的改进: ZGC垃圾回收器在JDK 13中进行了一些性能和功能方面的改进。
文本块(Text Blocks)标准化: 引入了文本块的标准化特性,允许在代码中更容易地编写多行文本。
String html = """ <html> <body> <p>Hello, World!</p> </body> </html> """;
Unix域套接字(Unix Domain Socket)支持: 在Unix系统上引入了对Unix域套接字的支持,以便进行本地进程间通信。
新的命令行工具: 引入了一些新的命令行工具,如
jshell
(交互式Java Shell)的改进和新的jfr
(Java Flight Recorder)工具。对废弃特性的移除: JDK 13中移除了一些废弃的API和功能,以保持平台的简洁性和稳定性。
其他改进: JDK 13还包括了一些性能改进、JVM的改进和其他库的改进。
由于JDK 13是非LTS版本,它的目标是引入新的实验性特性和改进,而不是提供长期支持。因此,在生产环境中使用时需要谨慎考虑,并可能需要在后续LTS版本中迁移代码。开发者应根据其项目的需求和周期来决定是否采用JDK 13。
14、JDK 14 (2020.3)
JDK 14于2020年3月发布,它引入了一些新功能、改进和实验性特性。以下是JDK 14版本的一些主要新功能和改进:
- Switch表达式增强: 在JDK 12和13中引入的
switch
表达式在JDK 14中进一步增强,允许使用多个标签常量。int result = switch (day) { case 1, 2, 3, 4, 5 -> { System.out.println("Weekday"); yield 42; } case 6, 7 -> { System.out.println("Weekend"); yield 0; } default -> throw new IllegalArgumentException("Invalid"); };
- Records(记录类): 引入了记录类,这是一种新的类类型,用于声明不可变的、自动实现
equals()
、hashCode()
和toString()
等方法的数据对象。record Point(int x, int y) { }
- Pattern Matching for
instanceof
: 引入了模式匹配用于instanceof
操作符,使代码更简洁。if (obj instanceof String s) { // 在此作用域中可以使用s }
- Text Blocks(文本块)改进: 改进了文本块的处理方式,允许在文本块中插入表达式。
String formatted = """ Hello, %s! Your balance is $%,.2f. """.formatted(name, balance);
垃圾回收器改进: JDK 14包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。
外部库支持改进: 引入了一些外部库的新版本,如OpenJFX 14,以提供更好的图形用户界面(GUI)支持。
JFR事件流输出(JFR Event Streaming): 引入了JFR事件流输出功能,允许在运行时流式处理JFR事件数据。
Foreign Function & Memory API(Incubator): 引入了外部函数和内存API的孵化版本,用于与本地代码和内存进行交互。
其他改进: JDK 14还包括了一些性能改进、对废弃特性的移除和一些库的改进。
需要注意的是,JDK 14中的一些功能可能处于实验性阶段(例如,Records和Pattern Matching for instanceof
),这意味着它们可能在后续版本中进一步改进或正式成为Java的一部分。开发者可以根据项目需求和长期计划来考虑是否采用JDK 14。
15、JDK 15(2020.9)
JDK 15于2020年9月发布,它引入了一些新功能、改进和实验性特性。以下是JDK 15版本的一些主要新功能和改进:
- Sealed Classes(封闭类): 引入了封闭类,这是一种新的类类型,允许类明确指定允许继承的子类。
sealed class Shape permits Circle, Rectangle, Triangle { // ... }
- Text Blocks(文本块)增强: 进一步增强了文本块的语法,以允许在文本块中包含反斜杠。
String json = """ { "name": "John", "age": 30, "city": "New York" } """;
-
外部库改进: 引入了外部库的新版本,如OpenJFX 15,以提供更好的图形用户界面(GUI)支持。
-
垃圾回收器改进: JDK 15包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。
-
Unix套接字通道(Unix Domain Socket Channel): 引入了对Unix套接字通道的支持,以便在Unix系统上进行本地进程间通信。
-
Remove Applets(移除小程序): 移除了Applet API,这是一个已过时的浏览器插件技术。
-
其他改进: JDK 15还包括了一些性能改进、对废弃特性的移除和一些库的改进。
需要注意的是,JDK 15中的一些功能可能处于实验性阶段,而其他功能可能在未来版本中进一步改进或正式成为Java的一部分。开发者可以根据项目需求和长期计划来考虑是否采用JDK 15。此外,JDK 15是一个非LTS(非长期支持)版本,因此不会提供长期支持,开发者可能需要在后续LTS版本上迁移代码。
16、JDK 16 (2021.3)
JDK 16于2021年3月发布,它引入了一些新功能、改进和实验性特性。以下是JDK 16版本的一些主要新功能和改进:
-
Unix域套接字通道API: 引入了对Unix域套接字(Unix Domain Socket)通道的正式API支持,以便进行本地进程间通信。
-
向量API(Incubator): 引入了向量API的孵化版本,允许开发者更容易地执行并行计算。
-
移除的功能: JDK 16中移除了一些已弃用的功能和模块,如RMI Activation系统和Applet API。
-
Alpine Linux支持: 引入了对Alpine Linux的官方支持,使Java可以更好地在Docker容器中运行。
-
垃圾回收器改进: JDK 16包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。
-
Pattern Matching for
instanceof
(Preview): 对模式匹配用于instanceof
的支持进行了改进,包括在模式匹配中使用instanceof
的情况。 -
记录类增强(Preview): 在记录类中引入了更多的功能,如嵌套的记录类和记录类的模式匹配。
-
Foreign Function & Memory API(Incubator): 引入了外部函数和内存API的孵化版本的改进,以支持更多的底层交互操作。
-
其他改进: JDK 16还包括了一些性能改进、对废弃特性的移除和一些库的改进。
需要注意的是,一些功能处于孵化或预览阶段,这意味着它们可能在后续版本中进一步改进或正式成为Java的一部分。开发者可以根据项目需求和长期计划来考虑是否采用JDK 16。由于JDK 16不是LTS版本,因此它提供的支持周期相对较短,开发者可能需要在后续版本上迁移代码。
17、JDK 17 (2021.9)
JDK 17于2021年9月发布,是一个LTS(长期支持)版本,提供长期支持和维护。以下是JDK 17版本的一些主要新功能和改进:
-
垃圾回收器改进: JDK 17包括了一些垃圾回收器的改进,特别是G1垃圾回收器的性能和稳定性改进。
-
Sealed Classes(封闭类)的进一步增强: 在JDK 17中,封闭类(Sealed Classes)可以扩展已知的子类,而不仅仅是声明的子类。
-
模式匹配的正式版本: 模式匹配在JDK 17中成为了正式版本,包括模式匹配用于
instanceof
和模式匹配switch
表达式。if (obj instanceof String s) { // 在此作用域中可以使用s } int result = switch (day) { case 1, 2, 3, 4, 5 -> { System.out.println("Weekday"); yield 42; } case 6, 7 -> { System.out.println("Weekend"); yield 0; } default -> throw new IllegalArgumentException("Invalid"); };
-
外部库和模块改进: JDK 17引入了一些外部库的新版本,同时对一些模块进行了改进。
-
Alpine Linux支持改进: 进一步改进了在Alpine Linux上的支持,以提高在Docker容器中运行Java的性能和可用性。
-
移除的功能: JDK 17中移除了一些已弃用的功能和模块,如RMI Activation系统和Applet API。
-
其他改进: JDK 17还包括了一些性能改进、对废弃特性的移除和一些库的改进。
由于JDK 17是一个LTS版本,它提供了相对较长的支持和维护周期,适用于那些需要长期稳定性和可靠性的应用程序和项目。开发者可以根据项目需求和长期计划来考虑是否采用JDK 17,特别是对于企业和大型应用程序。