Last Updated:

自 JDK 8 到 17 以来所有 Java 和 JVM 功能的分类列表

银狐

从 Java 8 以来,一直到 16 版本,已有 180 个 JDK Enhancement Proposals (opens new window)(JEPs)塑造 Java,每个 JEP 都给这个平台带来了改善。这篇文章分类梳理了最重要的改进。

TOTAL NUMBER OF JEPS SINCE JDK 8

目录:

JEPs 的完全列表可以在 OpenJDK 网站下的 jdk (opens new window)和 jdk9 (opens new window)项目找到。

所有的特性基本上都是可用的,且默认开启,除了那些有标记为以下:

#新语言特性

由于 Java 8 给这个语言带来了许多深具影响的改进,这个章节会简要涵盖下最近几年的更新。想要更深入的了解,参看 New language features since Java 8 to 16 (opens new window)[1]

#新 API

#通用

#国际化

#图形和桌面应用

#性能提升

#通用

#

#并发

#编译器

#G1 垃圾收集器(默认)

#其它垃圾收集器

#诊断分析及工具

#安全改进

#TLS

  • 支持 TLS 1.3 JDK 11(opens new window)

  • 数据报传输层安全 ( DTLS, Datagram Transport Layer Security ) 的 API JDK 9(opens new window)

  • 实现 TLS 的 OCSP 修订 ( Online Certificate Status Protocol (OCSP) stapling ) ,提高证书状态检查的性能 JDK 9(opens new window)

  • TLS 应用层协议协商 ( ALPN, Application-Layer Protocol Negotiation ) 扩展,无需额外的来回通信即可进行协议协商;ALPN 是 HTTP/2 连接的要求 JDK 9(opens new window)

#加密

#启动

#打包

#Javadoc

#字节码

  • 用 Unsafe::defineAnonymousClass() 替换 Lookup::defineHiddenClass(),使框架动态生成隐藏类,这些类不能被其它类发现、链接或直接使用

    JDK 15(opens new window)

  • java.lang.invoke.constant 包允许轻松的描述可加载常量( ldc 指令的运算元 ),这比依赖临时的 String 表示法更不易出错 JDK 12(opens new window)

  • CONSTANT_Dynamic 常量池条目,使用引导的方式进行解析,和 INVOKEDYNAMIC 调用类似 JDK 11(opens new window)

  • 引入 Nest 访问控制上下文,将类包装在同一代码实体中,例如嵌套类,避免了编译器向生成的字节码插入桥接方法的需要 JDK 11(opens new window)

  • 为静态字符串连接生成的字节码使用 invokedynamic 而不是直接创建 StringBuilder#append 链。这将使未来的字符串连接优化不需要字节码变动 JDK 9(opens new window)

  • INVOKEDYNAMIC 可以表示对象属性和/或集合的高层级操作 JDK 9(opens new window)

#新支持平台

#新版本号格式

#废弃和移除

#总结

JDK 8 (opens new window)是在 2014 年发布的。我们不得不为 JDK 9 (opens new window)等待三年半的时间。 但从那时起,就快了起来。Java 有一个新的发布架构,目标是每六个月提供一个新版本。

虽然现在仍然支持 Java 8,但迁移到最新版本会带来相当多的改进。

译者注:


  1. 这篇文章也有翻译:参看 Java 9 到 16 的语言特性更新 (opens new window)↩︎

  2. 这里指的是原文的参考来源 ↩︎ ↩︎ ↩︎

  3. 译者有写相关的介绍文 (opens new window)↩︎

本文来自:https://nanova.me/java-lang-jvm-updates/