# Java 9 到 16 的语言和 JVM 特性更新分类清单

本译文已获取作者许可后翻译、调整、发布。

原文:A categorized list of all Java and JVM features since JDK 8 to 16 (opens new window)

从 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

# 加密

# 启动

# 打包

# 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) ↩︎