Java 的各版本与其新特性
最近看 Spring framework 6、Spring Boot 3、Elasticsearch 8.0 这些都得使用 Java 17 了,而 Kafka 3.0 开始也弃用了 Java 8。正好自己一直没有系统性地去了解一下 Java 9 以后各个新版本的特性,所以自己总结了一下各个 Java 版本的特性,整理好以供参考和学习。
Spring framework 6 消息来源:https://spring.io/blog/2021/09/02/a-java-17-and-jakarta-ee-9-baseline-for-spring-framework-6
Spring Boot 3 消息来源:https://spring.io/blog/2022/01/20/spring-boot-3-0-0-m1-is-now-available
Elasticsearch 8.0 消息来源:https://www.elastic.co/guide/en/elasticsearch/reference/8.0/migrating-8.0.html
Kafka 3.0 消息来源:https://kafka.apache.org/downloads
不过,Spring 和 Kafka 的新版本文档截至目前(2022.2.21)还没更新过来,里面还有支持 Java 8 的语句没修改…… 不禁感叹论时效性的话,还是需要关注各个框架的官宣文稿啊
Kafka 3.1.x 文档:https://kafka.apache.org/documentation/#java
Spring framework 6.0.0 文档:https://docs.spring.io/spring-framework/docs/6.0.0-SNAPSHOT/reference/html/overview.html#overview
Java 各版本的简略新特性表
版本 | 发布时间 | 新特性 |
---|---|---|
1.0 | 1996 | 语言本身、Java 虚拟机、Applet、AWT |
1.1 | 1997 | 内部类、反射、JAR 文件格式、JDBC、JavaBeans、RMI |
1.2 | 1998 | strictfp 修饰符、Java 类库的 Collections 集合类、J2SE \ J2EE \ J2ME 体系、EJB、Java Plug-in、Java IDL、Swing、JIT 即时编译器 |
1.3 | 2000 | Java 类库的数学运算和新的 Timer API 等、JNDI 开始作为一项平台级服务、使用 CORBA IIOP 实现 RMI、提供大量新的 Java 2D API、新添加 Java Sound 类库 |
1.4 | 2002 | 断言、正则表达式、异常链、NIO、日志类、XML 解析器、XSLT 转换器 |
5.0 | 2004 | 泛型类、遍历循环(for each 循环)、可变长参数、自动装箱、元数据(动态注解)、枚举、静态导入、改进了 JMM(Java 内存模型)、提供了 java.util.concurrent(JUC)并发包 |
6 | 2006 | 启用Java EE 6 \ Java SE 6 \ Java ME 6的新命名来代替J2EE \ J2SE \ J2ME的产品线命名方式、提供初步的动态语言支持、提供编译期注解处理器、微型 HTTP 服务器 API、对 Java 虚拟机内部做了大量改进(锁与同步、垃圾收集、类加载等方面的实现) |
7 | 2011.7 | 基于字符串的 switch、钻石操作符、二进制字面量、异常处理改进、提供新的 G1 收集器、加强对非 Java 语言的调用支持、可并行的类加载架构 |
8 | 2014.3 | Lambda 表达式、包含默认方法的接口、流和日期/时间库、内置Nashorn JavaScript引擎的支持、彻底移除 HotSpot 的永久代 |
9 | 2017.9 | Jigsaw 模块化功能、接口私有方法、Try-With Resources、@SafeVarargs注释、集合工厂方法、Process API改进、流API改进、增强若干工具(JS Shell、JLink、JHSDB等)、整顿了 HotSpot 各个模块各自为战的日志系统、支持HTTP 2客户单API |
10 | 2018.3 | 局部变量的类型推断、应用类数据共享、向G1引入并行Full GC、线程局部管控、统一源仓库、统一垃圾收集器接口、统一即时编译器接口(引入新的Graal即时编译器) |
11 | 2018.9 | ZGC 垃圾收集器、本地变量类型推断、字符串加强、集合加强、Stream 加强、Optional 加强、InputStream 加强、HTTP Client API、一个命令编译运行源代码 |
12 | 2019.3 | Switch 表达式(预览)、Java 微测试套件(JMH)、Shenandoah垃圾收集器、JVM常量API、默认类数据共享归档文件、可终止的G1 Mixed GC、G1及时返回未使用的已分配内存 |
13 | 2019.9 | 增强 ZGC 释放未使用内存、Socket API 重构、Switch 表达式扩展(预览功能)、文本块(预览功能) |
14 | 2020.3 | 完全支持改进的 switch 表达式、instanceof 支持模式匹配、record 特性、NullPointerException 精确到变量、加入了 Java 打包工具 jpackage 的预览版 |
15 | 2020.9 | ZGC 将从实验功能升级为产品、char 在 CharSequence 中添加了 isEmpty 默认方法、支持 Unicode 13.0、隐藏类、TreeMap 方法的专用实现、增加了为远程JMX配置第三个端口的能力 |
16 | 2021.3 | record 正式使用、jpackage 工具正式使用、instanceof 正式使用 |
17 | 2021.9 | 增强了伪随机数算法、移除 AOT 提前编译和 JIT 即时编译的功能、sealed修饰的类和接口限制其他的类或者接口的扩展和实现、进一步增强了switch语法的模式匹配 |
较早的版本特性参考了《Java 核心技术:卷I 基础知识(原书第11版)》和《深入理解 Java 虚拟机:JVM 高级特性与最佳实践(第3版)》
JDK 8 ~ 17 各版本变化简单总结
需要注意,OpenJDK 和 Oracle 在具体细节上会有区别,以下列表中斜体为 OpenJDK 文档中提到的变化。
需要查看详情的话,请参考其他几篇相关的总结:
《JDK 9 ~ 17 各个版本的重要新特性》
《JDK 9 ~ 17 各个版本删除的功能和选项》
《JDK 9 ~ 17 各个版本弃用的功能和选项》
《JDK 9 ~ 17 各个版本的其他新特性》
JDK 8
具体常用的特性可以参考《Java 8 实战》,感觉很详细
所属范围 | 新特性 |
---|---|
语言 | Lambda 表达式、方法引用、接口默认方法、重复注解、类型注解(Type Annotation)、改进的类型推断、方法参数反射 |
核心库 | java.util.stream 包中的类提供 Stream API、java.util.Optional、具有键冲突的 HashMap 的性能改进(红黑树)、Rhino javascript 引擎已被Nashorn Javascript 引擎 取代、 IO 和 NIO ( SelectorProvider 基于 Solaris 事件端口机制的 Solaris 新实现、减小 <JDK_HOME>/jre/lib/charsets.jar 文件大小、 java.lang.String(byte[],*) 构造函数和方法 java.lang.String.getBytes() 的性能改进)、并行数组排序、标准编码和解码 Base64、无符号算术支持、 网络(类 java.net.URLPermission 已添加、类 java.net.HttpURLConnection 中如果安装了安全管理器则调用该请求以打开连接需要权限)、并发( java.util.concurrent 包新类和接口、 java.util.concurrent.ConcurrentHashMap 类新方法以支持基于新添加的流工具和 lambda 表达式的聚合操作、 java.util.concurrent.atomic 包新类以支持可扩展的可更新变量、 java.util.concurrent.ForkJoinPool 类新方法以支持公共池、添加类 java.util.concurrent.locks.StampedLock 以提供基于能力的锁,该锁具有三种用于控制读/写访问的模式) |
JVM | 添加了硬件内在函数以使用高级加密标准 (AES)、删除 PermGen、Java 编程语言中的默认方法由方法调用的字节码指令支持 |
工具 | jjs 命令以调用 Nashorn 引擎、 java 命令启动 JavaFX 应用程序、 java 手册页已重新设计、 jdeps 命令行工具用于分析类文件、Java 管理扩展 (JMX) 提供对诊断命令的远程访问、 jarsigner 工具用于向时间戳权威 (TSA) 请求签名时间戳的选项、javac 命令(可用于存储形式参数名称并使反射 API 能够检索形式参数名称的 -parameters 选项、正确实施 Java 语言规范 (JLS) 第 15.21 节中相等运算符的类型规则、支持在运行 javadoc 时生成的文件中检查可能导致各种问题的问题的评论内容、提供了根据需要生成本机标头的能力)、Pack200(对 JSR 292 引入的常量池条目和新字节码的支持、支持由 JSR-292、JSR-308 和 JSR-335 指定的类文件更改)、 JDBC(JDBC-ODBC 桥已被删除、JDBC 4.2 引入了新特性)、 包含 Java DB 10.10、包括 Java Mission Control 5.3 |
javadoc | 支持新的 DocTree API、支持新的 Javadoc Access API、现在支持在运行 javadoc 时生成的文件中检查可能导致各种问题的问题的评论内容 |
部署 | 对于沙盒小程序和 Java Web Start 应用程序, URLPermission 现在用于允许连接回到启动它们的服务器而 SocketPermission 不再允许、在所有安全级别的主 JAR 文件的 JAR 文件清单中都需要 Permissions 属性 |
国际化 | Unicode 6.2.0、采用 Unicode CLDR 数据和 java.locale.providers 系统属性、新的日历和语言环境 API、能够将自定义资源包安装为扩展 |
客户端库 | JavaFX(新的 Modena 主题、 SwingNode 类使开发人员能够将 Swing 内容嵌入到 JavaFX 应用程序中、新的 UI 控件、 javafx.print 包为 JavaFX 打印 API 提供公共类、3D 图形功能现在包括 3D 形状 \ 相机 \ 灯光 \ 子场景 \ 材质 \ 拾取和抗锯齿、 WebView 提供了新功能和改进、增强的文本支持、对 Hi-DPI 显示器的支持、CSS Styleable* 类成为公共 API、新 ScheduledService 类允许自动重启服务、可用于 ARM 平台) |
安全 | 默认启用客户端 TLS 1.2、 AccessController.doPrivileged 使代码能够断言其权限的子集、更强大的基于密码的加密算法、JSSE 服务器中的 SSL/TLS 服务器名称指示 (SNI) 扩展支持、支持 AEAD 算法、KeyStore 增强功能、SHA-224 消息摘要、增强对 NSA Suite B 加密的支持、更好地支持高熵随机数生成、 java.security.cert.PKIXRevocationChecker 用于配置 X.509 证书吊销检查、适用于 Windows 的 64 位 PKCS11、Kerberos 5 重放缓存中的新 rcache 类型、支持 Kerberos 5 协议转换和约束委派、默认禁用 Kerberos 5 弱加密类型、GSS-API/Kerberos 5 机制的未绑定 SASL、多个主机名的 SASL 服务、JNI 桥接到 Mac OS X 上的本机 JGSS、在 SunJSSE 提供程序中支持更强的临时 DH 密钥、支持 JSSE 中的服务器端密码套件首选项自定义 |
JDK 9
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
规范 | 模块系统、新的版本字符串方案 | ||
语言 | 打磨Coin项目(@SafeVargs 可用于私有实例方法、等价 final 变量可用于 try-with-resouces 语句、接口私有方法、禁止将下划线作为合法标识符、匿名类钻石标识符) | ||
核心库 | 集合的便利工厂方法、紧凑字符串、平台日志 API 和服务、并发包更新、增强的方法句柄、增强 @Deprecated 注解、自旋等待提示、过滤传入的序列化数据、进程 API 更新、变量处理器、XML 目录 API、堆栈遍历 API、将选定的 Xerces 2.11.0 更新合并到 JAXP、Nashorn 的解析器 API、在 Nashorn 中实现选定的 ECMAScript 6 功能 | ||
JVM | 编译器控制、分段代码缓存、语言定义对象模型的动态链接、G1 成为默认垃圾收集器、提高 G1 可用性确定性和性能、统一 JVM 日志记录、统一 GC 日志记录 | JDK 8 中已弃用的 GC 组合 | CMS 垃圾收集器 |
工具 | jshell、更多诊断命令、多版本JAR文件、为旧平台版本编译、jlink | 启动时JRE版本选择、JVM TI hprof代理、jhat | |
javadoc | 简化的Doclet API、支持 HTML 5、支持搜索、模块系统 | ||
部署 | 增强的 Java 控制面板、模块化 Java 应用程序打包 | Java 插件、Applet API | |
国际化 | Unicode 8.0、默认启用 CLDR 区域设置数据、UTF-8 属性文件 | ||
客户端库 | 多分辨率图像、为模块化准备 JavaFX UI 控件和 CSS API、BeanInfo 注解、TIFF 图像 I/O、Windows 和 Linux 上的 HiDPI 图形、特定于平台的桌面功能、在 Linux 上启用 GTK 3 | ||
安全 | DTLS、TLS应用层协议协商扩展、TLS的OCSP Stapling、利用 GHASH 和 RSA 的 CPU 指令、基于 DRBG 的 SecureRandom 实现、禁用 SHA-1 证书、默认创建 PKCS 12 密钥库、SHA-3 哈希算法 |
JDK 10
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | 局部变量的类型推断 var | ||
核心库 | Optional.orElseThrow()、不可修改集合 API、基于时间的发布版本控制 | Runtime.getLocalizedInputStream 和 getLocalizedOutputStream 方法、RMI 服务器端多路复用协议支持、 | |
JVM | G1 的并行 Full GC、 垃圾收集器接口、应用程序类-数据共享(CDS)、线程本地握手、在用户指定的备用内存设备(例如 NV-DIMM)上分配 Java 对象堆、实验性基于 Java 的 JIT 编译器 Graal |
FlatProfiler、过时的 -X 选项 | |
工具 | 增强 for 循环的字节码生成 | Native-Header 生成工具 (javah)、Java Launcher 的数据模型选项 -d32 和 -d64 | |
javadoc | 支持多种样式表、重写不改变规范的方法、@Summary 注解 | 旧的(JDK 6、JDK 7 和 JDK 8 时代)标准 Doclet | |
部署 | 将 JDK 森林整合到一个存储库中 | 常见的 DOM API | |
svc | 禁用 JRE 上次使用跟踪的系统属性、开箱即用 JMX 代理的散列密码 | SNMP 监控支持 | |
国际化 | 额外的 Unicode 语言标签扩展 | ||
客户端库 | 对使用旧 LookAndFeel 的支持、JavaFX 应用程序生命周期的 HostServicesgetWebContext 方法、JavaFX 中的 T2K Rasterizer 和 ICU 布局引擎、JavaFX 中已弃用的 VP6/FXM/FLV 代码 | ||
安全 | 根证书、TLS Session Hash 和扩展的 Master Secret 扩展支持 | 已弃用的 Pre-1.2 SecurityManager 方法和字段、policytool 工具、com.sun.security.auth 中已弃用的类 | java.security.{Certificate,Identity,IdentityScope,Signer} APIs、 java.security.acl APIs、 javax.security.auth.Policy API |
JDK 11
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | Lambda 参数的局部变量使用 var 语法 | ||
核心库 | HTTP 客户端(标准)、新的 Collection.toArray(IntFunction) 默认方法、 | sun.misc.Unsafe.defineClass、Thread.destroy() 和 Thread.stop(Throwable) 方法、sun.nio.ch.disableSystemWideOverlappingFileLockCheck 属性 | ThreadPoolExecutor 不应该指定对终结方法的依赖、Nashorn JavaScript 引擎 |
JVM | 编译器线程的延迟分配、ZGC 可扩展的低延迟垃圾收集器(实验性)、Epsilon 无操作垃圾收集器、低开销堆分析、基于嵌套的访问控制、 动态类文件常量、改进 Aarch64 内在函数、飞行记录仪(Flight Recorder) |
-XX+AggressiveOpts、对商业功能的过时支持 | |
工具 | 启动单文件源代码程序 | Java Mission Control (JMC)、Java EE 和 CORBA 模块 | Pack200 工具和 API |
部署 | Java 部署技术 | ||
svc | JVM-MANAGEMENT-MIB.mib、SNMP 代理 | ||
国际化 | Unicode 10、将语言环境数据更新为 Unicode CLDR v33 | sun.locale.formatasdefault 属性 | |
客户端库 | JavaFX、com.sun.awt.AWTUtilities 类、Oracle JDK 中的 Lucida 字体、appletviewer Launcher、Oracle JDK 的 javax.imageio JPEG 插件不再支持带 alpha 的图像 | NSWindowStyleMaskTexturedBackground | |
安全 | 与 Curve25519 和 Curve448 的 JEP 324 密钥协议、Brainpool EC 支持、ChaCha20 和 Poly1305 加密算法、增强的密钥库机制、向 SunMSCAPI 添加 RSASSA-PSS 签名支持、传输层安全 (TLS) 1.3、支持 RFC 8009 中定义的 Kerberos 5 的 HMAC-SHA2 的 AES 加密 | 基于流的 GSSContext 方法 |
JDK 12
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | switch 表达式(预览) | ||
核心库 | Linux 上的POSIX_SPAWN 选项、JVM 常量 API、紧凑数字格式 | FileInputStream 和 FileOutputStream 中的 finalize 方法、 java.util.ZipFile/Inflator/Deflator 中的 finalize 方法 | |
JVM | ZGC 并发类卸载、在备用内存设备上分配老一代 Java 堆、HotSpot Windows 操作系统检测正确识别 Windows Server 2019、命令行标志 -XX+ExtensiveErrorReports、 Shenandoah:一种低暂停时间的垃圾收集器(实验性)、仅维护单个 AArch64 端口、默认CDS档案、G1 的可中止混合收集、立即从 G1 返回未使用的已提交内存 |
-XX+/-MonitorInUseLists | |
工具 | jdeps --print-module-deps 报告传递依赖、 微基准套件(JMH) |
javac 对 6/1.6 源、目标和发布值的支持 | |
svc | 从 Oracle 生成的构建中的 YY.M 供应商版本字符串 | ||
国际化 | Unicode 11、日文新年号的方形字符支持 | ||
客户端库 | com.sun.awt.SecurityWarning 类 | ||
安全 | 禁止和允许 java.security.manager 系统属性的选项、-groupname 选项已添加到 keytool 密钥对生成、新的 Java Flight Recorder (JFR) 安全事件、自定义 PKCS12 密钥库的生成、ChaCha20 和 Poly1305 TLS、支持 krb5.conf 中的dnscanonicalizehostname标志 | GTE CyberTrust 全局根 | 默认 Keytool -keyalg 值 |
JDK 13
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | switch表达式(预览版)、文本块(预览版) | ||
核心库 | FileSystems.newFileSystem(Path, Map
重新实现旧的 Socket API |
运行时跟踪方法、JDK 1.4 之前的 SocketImpl 实现 | 已弃用的 rmic 删除工具 |
JVM | ZGC 取消提交未使用的内存、-XXSoftMaxHeapSize 标志、ZGC 最大堆大小增加到 16TB、动态 CDS 归档 | VM 选项 -XX+AggressiveOpts | 不推荐使用的 Java 选项 -Xverifynone 和 -noverify |
工具 | 使用命名空间支持创建 DOM 和 SAX 工厂的新方法 | ||
javadoc | 从 javadoc 工具中删除旧功能 | ||
国际化 | Unicode 12.1 | ||
客户端库 | awt.toolkit 系统属性 | macOS 上已弃用且不受支持的 Swing Motif 外观 | |
安全 | CRL 的可配置读取超时、用于显示 TLS 配置信息的新 keytool -showinfo -tls 命令、支持下一代 MS 加密 (CNG)、SunPKCS11 Provider 升级支持 PKCS#11 v2.40、支持 TLS 中的 X25519 和 X448、JSSE 中没有服务器端状态的会话恢复、允许限制 SASL 机制、规范 XML 1.1 URI 的新字符串常量、[xmldsig] 添加 KeyValueEC_TYPE、在 Windows 上添加了默认的本机 GSS-API 库、支持 Kerberos 跨领域引用 (RFC 6806) | SunJSSE 提供程序不再支持重复的 RSA 服务、T-Systems Deutsche Telekom 根 CA 2 证书、两个 DocuSign 根 CA 证书、两个 Comodo 根 CA 证书、内部 com.sun.net.ssl 包、从 SunJSSE Provider 中删除实验性 FIPS 140 兼容模式 | 不推荐使用的 javax.security.cert API |
JDK 14
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | 记录(Record)(预览版)、 instanceof 的模式匹配(预览版)、switch 表达式、文本块(第二次预览) |
||
核心库 | 会计货币格式支持、明确 ReadableByteChannel.read() 规范及相关方法、 非易失性映射字节缓冲区、外部内存访问 API(孵化器) |
sun.nio.cs.map 系统属性 | 不推荐线程 suspend / resume |
JVM | Windows 和 macOS 上的 ZGC(实验性)、Parallel GC 改进、G1 的 NUMA 感知内存分配、JFR 事件流、 有用的 NullPointerExceptions |
并发标记清除 (CMS) 垃圾收集器 | 弃用 ParallelScavenge + SerialOld GC 组合、 弃用 Solaris 和 SPARC 端口 |
工具 | 允许默认调用可发现的 javac 插件、SAX ContentHandler 处理 XML 声明的新方法、 打包工具(孵化器) |
Pack200 工具和 API | |
部署 | netscape.javascript.JSObjectgetWindow 方法 | ||
客户端库 | 不推荐使用 NSWindowStyleMaskTexturedBackground | ||
安全 | 默认禁用 TLS、CertPath 和签名 JAR 中的弱命名曲线、Apache Santuario 库更新到版本 2.1.4 | 已弃用的 java.security.acl API、默认 keytool -keyalg 值 | 弃用了旧版椭圆曲线以进行删除、不推荐使用 OracleUcrypto JCE Provider |
JDK 15
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | 隐藏类、文本块、 密封类(预览版)、instanceof 的模式匹配(第二次预览)、记录(Record)(第二次预览) |
||
核心库 | 为 CharSequence 添加了 isEmpty 默认方法、对 SOINCOMINGNAPI_ID 的支持、 TreeMap 方法的特殊实现、 重新实现旧的 DatagramSocket API、外部内存访问 API(第二个孵化器) |
最终弃用的 Solaris 特定 SOFLOWSLA 套接字选项、RMI 静态存根编译器 (rmic)、Nashorn JavaScript 引擎 | RMI 激活 |
JVM | 为调试模式添加到 jhsdb 的新选项、 ZGC:可扩展的低延迟垃圾收集器(产品)、Shenandoah:低暂停时间垃圾收集器(产品) |
已过时 -XXUseAdaptiveGCBoundary、 删除 Solaris 和 SPARC 端口 |
-XXForceNUMA 选项、禁用偏向锁定和不推荐使用的偏向锁定标志 |
工具 | 为 jstatd 添加了用于指定 RMI 连接器端口号的新选项、为 jcmd 添加了用于编写 gzipped 堆转储的新选项 | ||
javadoc | |||
部署 | NSWindowStyleMaskTexturedBackground | ||
svc | 为远程 JMX 配置第三个端口的功能 | 已弃用的常量 RMIConnectorServer.CREDENTIAL_TYPES | |
国际化 | Unicode 13.0 | ||
安全 | 为 jarsigner 添加了撤销检查、如果使用了弱算法工具会发出警告、SunJCE Provider 支持基于 SHA-3 的 Hmac 算法、用于配置 TLS 签名方案的新系统属性、支持 certificate_authorities 扩展、支持 krb5.conf 中的规范化、支持跨域MSSFU、 爱德华兹曲线数字签名算法 (EdDSA) |
Comodo 根 CA 证书、DocuSign 根 CA 证书、已弃用的 SSLSession.getPeerCertificateChain() 方法实现、com.sun.net.ssl.internal.ssl.Provider 名称 | 默认禁用本机 SunEC 实现、为先前弃用的 ContentSigner API 添加了 forRemoval=true |
JDK 16
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | 密封类(第二次预览)、记录(Record)、instanceof 的模式匹配 | ||
核心库 | 外部链接器 API(孵化器)、默认情况下对 JDK 内部进行强封装、外部内存访问 API(第三个孵化器)、基于值的类的警告、添加 InvocationHandler::invokeDefault 方法用于 Proxy 的默认方法支持、Unix 域套接字、java.time 格式添加了日时段支持、添加 Stream.toList() 方法 | 最终弃用的线程组stop、destroy、isDestroyed、setDaemon 和 isDaemon | |
JVM | 矢量 API(孵化器)、改进的编译命令标志、ZGC 并发堆栈处理、在 G1 中同时取消提交内存、默认启用新的 jdk.ObjectAllocationSample 事件、弹性元空间、 启用 C++14 语言功能、Alpine Linux 端口、Windows/AArch64 端口 |
去除实验特征 AOT 和 Graal JIT、已弃用的跟踪标志已过时,必须用统一日志等效项替换 | 部分 Signal-Chaining API 已弃用 |
工具 | 打包工具 | ||
javadoc | |||
部署 | |||
基础设施 | 从 Mercurial 迁移到 Git、迁移到 GitHub | ||
国际化 | |||
客户端库 | 删除 java.awt.PeerFixer | ||
安全 | 对 RSASSA-PSS 和 EdDSA 的签名 JAR 支持、 SUN \ SunRsaSign 和 SunEC 提供商支持基于 SHA-3 的签名算法、 jarsigner 保留 POSIX 文件权限和符号链接属性、在 keytool -printcert 和 -printcrl 命令中添加了 -trustcacerts 和 -keystore 选项、 SunPKCS11 Provider 支持 SHA-3 相关算法、改进证书链处理、 改进 TLS 应用层协议协商 (ALPN) 值的编码、EdDSA 签名算法的 TLS 支持 | 1024 位密钥的根证书、传统的椭圆曲线 | 弃用了将 DN 表示为主体或字符串对象的 java.security.cert API |
JDK 17
所属范围 | 新特性 | 删除 | 弃用 |
---|---|---|---|
语言 | 密封类、switch 模式匹配(预览版)、 恢复始终严格的浮点语义 |
||
核心库 | DatagramSocket 可直接用于加入多播组、在 macOS 上添加对 UserDefinedFileAttributeView 的支持、增强的伪随机数生成器、外部函数和内存 API(孵化器)、控制台字符集 API、用于反序列化的 JDK Flight Recorder 事件、实现特定于上下文的反序列化过滤器、本机字符编码名称的系统属性、添加 java.time.InstantSource、十六进制格式和解析实用程序、 强封装 JDK 内部、矢量 API(第二个孵化器) |
强封装 JDK 内部相关的选项、sun.misc.Unsafe::defineAnonymousClass、RMI 激活 | 弃用 Socket 实现工厂机制 |
JVM | 理想图可视化器(IGV)的现代化、实验编译器黑洞支持、HotSpot JVM中新的类层次分析实现、macOS/AArch64 端口、统一日志支持异步日志刷新 | 实验性 AOT 和 JIT 编译器 | 弃用 JVM TI 堆函数 1.0 |
工具 | |||
javadoc | 错误消息中的源详细信息、“New API”的新页面和改进的“Deprecated”页面、包摘要页面上的“相关包” | ||
部署 | |||
svc | |||
国际化 | |||
客户端库 | 新的 macOS 渲染管道、 用于访问大图标的新 API | 弃用 Applet API 以进行删除 | |
安全 | 支持在 Keytool -genkeypair 命令中指定签名者、SunJCE Provider 使用 AES 密码支持 KW 和 KWP 模式、新的 SunPKCS11 配置属性、如果 PKCS11 库支持,SunPKCS11 提供程序支持 ChaCha20-Poly1305 Cipher 和 ChaCha20 KeyGenerator、具有系统属性的可配置扩展、如果 defaulttktenctypes 或 defaulttgsenctypes 不存在,则使用 allowed_enctypes | Telia 公司的 Sonera Class2 CA 证书 | 弃用安全管理器以进行删除、在 Kerberos 中弃用 3DES 和 RC4 |
一些原始资料的链接
Oracle
Oracle Java 的各个版本新特性文档:
简单来说,就是在 Oracle 的 Java SE 页面(https://docs.oracle.com/en/java/javase/index.html)里面点各个版本,然后找到“What's New”的链接。11 版本前的需要特别找一下,页面不一样。
版本 | 文档链接 |
---|---|
5.0 | https://docs.oracle.com/javase/1.5.0/docs/relnotes/features.html |
6 | https://www.oracle.com/java/technologies/javase/features.html |
7 | https://www.oracle.com/java/technologies/javase/jdk7-relnotes.html |
8 | https://www.oracle.com/java/technologies/javase/8-whats-new.html |
9 | https://docs.oracle.com/javase/9/whatsnew/toc.htm |
10 | https://www.oracle.com/java/technologies/javase/10-relnote-issues.html |
11 | https://www.oracle.com/java/technologies/javase/11-relnote-issues.html#NewFeature |
12 | https://www.oracle.com/java/technologies/javase/12-relnote-issues.html#NewFeature |
13 | https://www.oracle.com/java/technologies/javase/13-relnote-issues.html#NewFeature |
14 | https://www.oracle.com/java/technologies/javase/14-relnote-issues.html#NewFeature |
15 | https://www.oracle.com/java/technologies/javase/15-relnote-issues.html#NewFeature |
16 | https://www.oracle.com/java/technologies/javase/16-relnotes.html#NewFeature (这个地址好像有点bug,没跳到新特性介绍) |
16 | https://www.oracle.com/java/technologies/javase/16all-relnotes.html (16 版本含有全部子版本 release note 的地址,里面才有新特性介绍) |
17 | https://www.oracle.com/java/technologies/javase/17-relnote-issues.html#NewFeature |
OpenJDK
版本 | 文档链接 |
---|---|
6 | http://openjdk.java.net/projects/jdk6/ |
7 | http://openjdk.java.net/projects/jdk7/ |
8 | http://openjdk.java.net/projects/jdk8/ |
9 | http://openjdk.java.net/projects/jdk9/ |
10 ~ 19 | http://openjdk.java.net/projects/jdk/ |