Java SE Version 16
于2021-03-16发布。
引入的新特性:
- 适用于 instanceof 的模式匹配;
- 记录;
- ZGC 并发线程处理;
- Unix-Domain 套接字通道;
- 打包工具;
- 对基于值的类发出警告;
- 默认强封装 JDK 内部元素;
- 向量 API(孵化器);
- 外部链接器 API(孵化器);
- 外部存储器访问 API(第 3 个孵化器);
- 密封类(第二预览);
- 启用 C++14 语言特性(在 JDK 源代码中)
- 将 OpenJDK 社区的源代码存储库从 Mercurial(hg)迁移到 Git,并将它们托管在 GitHub 上以供 JDK 11 及更高版本使用,其中包括将 jcheck、webrev 和 defpath 工具等工具更新到 Git;
- 将 JDK 移植到 Alpine Linux 和其他使用 musl 作为 x64 上主要 C 库的发行版上;
- 将 JDK 移植到 Windows AArch64(ARM64)
Java SE Version 15
于2020-09-15发布。
引入的新特性:
- Hidden Classes;
- 删除 Nashorn JavaScript Engine;
- 新的垃圾回收器ZGC正式上线;
- ext Blocks 标准化;
- 新的垃圾回收器Shenandoah上线;
Java SE Version 14
于2020-03-17发布。
引入的新特性:
- 改进的switch表达式,第一次出现在Java 12和13中,在Java 14中获得了完全的支持;
- instanceof支持模式匹配(语言特性);
- record 特性,省去写get,equals()等方法;
- NullPointerException(JVM特性),精确到哪一行;
- 打包工具 (Incubator);
- G1的NUMA内存分配优化;
- JFR事件流;
- 非原子性的字节缓冲区映射;
- 友好的空指针异常;
- 弃用Solaris和SPARC端口;
- 移除CMS(Concurrent Mark Sweep)垃圾收集器;
- macOS系统上的ZGC;
- Windows系统上的ZGC;
- 弃用ParallelScavenge + SerialOld GC组合;
- 移除Pack200 Tools和API;
- 文本块 (第二个预览版);
- 外部存储器API (Incubator);
Java SE Version 13
于2019-09-17发布。
引入的新特性:
- 增强优化了ZGC垃圾收集器, 归还未使用的堆内存给操作系统;
- 将Java12引入的预览版Switch语法提为正式版,使得Switch的使用更加的顺滑和流畅;
- 支持了"""字符串块功能;
- 文本块升级;
- 动态CDS档案;
- 取消使用未使用的内存;
- 重新实现旧版套接字API;
- FileSystems.newFileSystem新方法;
- nio新方法;
- 核心库/ java.time;
- 核心库/ java.util中:I18N;
- 安全库/ java.security;
- 删除功能;
Java SE Version 12
于2019-03-19发布。
引入的新特性:
- 引入了一个叫Shenandoah 低停顿的实验性垃圾收集器;
- 改进了G1垃圾收集器,以便在不活动时将Java堆内存归还给操作系统;
- 引入了实验性的预览版Switch语句优化,可以省略break语句,合并多个case;
- 引入了JVM的常量API, 有助于一些分析的实现;
- JMH 基准测试;
- 只保留一个 ARM 64位实现(aarch64);
- 默认类数据共享归档文件;
- G1的可中断 mixed GC;
Java SE Version 11
于2018-09-25发布。Java 11 是自 Java 8 后的首个长期支持版本,将支持到2026年!
引入的新特性:
- 简化了启动单个源代码文件的方法,使得小白命令式编译运行Java文件变成更加简单,java Helloworld.java 即可;
- 增加支持了一个叫Epsilon的低开销垃圾收集器,又被称为"No-Op(无操作)"回收器;
- 增加支持了一个叫ZGC(Z Garbage Collector)的可伸缩低延迟垃圾收集器, 相比G1,停顿时间有了很大的改进,稳定在10ms以下;
- 重写了HttpClient,提供了新的标准化HttpClient API, 以后不再需要引入apache包的HttpClient或是okhttp就能支持高性能的网络5.编程;
- 增加了对TLS 1.3的支持;
- 允许了飞行记录器进行商用下的使用;
- 更好的支持了动态语言,在JVM层面增加了invokedynamic指令;
- 支持了在lambda内部使用var声明局部变量;
- 基于嵌套的访问控制;
- 动态的类文件常量;
- 改进 Aarch64 Intrinsics;
- 移除 Java EE 和 CORBA 模块,JavaFX 也已被移除;
- 采用 Curve25519 和 Curve448 算法实现的密钥协议;
- Unicode 10;
- 实现 ChaCha20 和 Poly1305 加密算法;
- 低开销的堆分配采样方法;
- 弃用 Nashorn JavaScript 引擎;
- 弃用 Pack200 工具及其 API;
Java SE Version 10
于2018-03-20发布。
引入的新特性:
- 支持了局部变量的类型推导,支持了局部变量的var声明
- 优化改进了G1垃圾回收器,采用并行化mark-sweep-compact算法
- 将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程。
- 统一的 GC 接口
- 应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。
- ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。
- 移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。
- 使用附加的 Unicode 语言标记扩展。
- 能将堆内存占用分配给用户指定的备用内存设备。
- 使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能。
- 在 OpenJDK 中提供一组默认的根证书颁发机构证书
Java SE Version 9
于2017-09-21发布。
引入的新特性:
- 模块化的 JVM,使之可以在内存有限的设备上运行。JVM 可以只运行那些应用程序需要的模块和 API;
- 支持了JShell,既类似node.js, python一样的命令行工具,对待简单的东西,可以直接命令测试;
- 改进Javadoc, 使得Javadoc可以搜索;
- 支持了List.of(), Set.of(), Map.of()的方式初始化不可变集合,省略了大量代码,语法糖;
- 改进的Stream API,比如ofNullable(),dropWhile(),takeWhile()等;
- 增强接口,支持了私有接口具体方法,补充了Java8默认和静态方法的支持;
- 把G1垃圾收集器作为默认的垃圾收集器,并标注CMS为过时收集器;
- 引入了响应式流Reactive Streams API, 支持了响应式编程;
- 支持了HTTP/2客户端;
Java SE Version 8
于2014-03-14发布。从Java 8开始开发代号已经弃用了,所以从Java 8之后已经没有官方的开发代号了。
引入的新特性:
- 支持Functional函数式接口;
- 支持Lambda表达式;
- 对各个类支持了很多对应的lambda增强方法;
- 支持集合的Stream流处理;
- 支持Optional来改进Null值的处理;
- 支持LocalDate等时间包,以改进原有Date;
- 增强接口,支持了接口的default方法和静态方法;
- Type注解;
- 优化了HashMap和ConcurrentHashMap;
- Nashhorn JavaScript引擎;
- 并发计数器;
- Parallel操作;
- 移除PermGen Error;
- TLS SNI;
Java SE Version 7
开发代号是Dolphin(海豚),于2011-07-28发行。
引入的新特性:
- switch语句块中允许以String作为分支条件;
- 在创建泛型对象时应用类型推断;
- try/catch 可以 catch 多个异常类型;
- 支持动态语言;
- 支持try-with-resources;
- 引入Java NIO.2开发包;
- 数值类型可以用2进制字符串表示,并且可以在字符串表示中添加下划线;
- 钻石型语法;
- Boolean类型反转,空指针安全,参与位运算;
- Objects类增加避免空指针的equals方法;
- 对Java集合( Collections)的增强支持;
- null值的自动处理。
Java SE Version 6
开发代号为Mustang(野马),于2006-12-11发行。
引入的新特性:
- 支持脚本语言;
- 引入JDBC 4.0 API;
- 引入Java Compiler API;
- 可插拔注解;
- 增加对Native PKI(Public Key Infrastructure)、Java GSS(Generic Security Service)、Kerberos和LDAP(Lightweight Directory Access Protocol)的支持;
- 继承Web Services;
- 做了很多优化。
J2SE Version 5.0
开发代号为Tiger(老虎),于2004-09-30发行。
引入的新特性:
- 引入泛型;
- 增强循环,可以使用迭代方式;
- 自动装箱与自动拆箱;
- 类型安全的枚举;
- 可变参数;
- 静态引入;
- 元数据(注解);
- 新的线程模型和并发库;
- 引入Instrumentation。
J2SE Version 1.4
开发代号为Merlin(隼),于2004-02-06发行(首次在JCP下发行)。
引入的新特性:
- XML处理;
- Java打印服务;
- 引入Logging API;
- 引入Java Web Start;
- 引入JDBC 3.0 API;
- 引入断言;
- 引入Preferences API;
- 引入链式异常处理;
- 支持IPv6;
- 支持正则表达式;
- 引入Image I/O slot machine API。
J2SE Version 1.3
开发代号为Kestrel(红隼),于2000-05-08发行。
引入的新特性:
- 引入Java Sound API;
- jar文件索引;
- 对Java的各个方面都做了大量优化和增强。
J2SE Version 1.2
开发代号为Playground(操场),于1998-12-08发行。(为了区别于 J2EE和 J2ME)
引入的新特性:
- 引入集合(Collection)框架;
- 对字符串常量做内存映射;
- 引入JIT(Just In Time)编译器;
- 引入对打包的Java文件进行数字签名;
- 引入控制授权访问系统资源的策略工具;
- 引入JFC(Java Foundation Classes),包括Swing 1.0、拖放和Java 2D类库;
- 引入Java 插件;
- 在JDBC中引入可滚动结果集、BLOB、CLOB、批量更新和用户自定义类型;
- 在Applet中添加声音支持。
JDK Version 1.1
于1997-02-19发行。
引入的新特性:
- 引入JDBC(Java Database Connectivity);
- 支持内部类;
- 引入Java Bean;
- 引入RMI(Remote Method Invocation);
- 引入反射(仅用于内省)。
JDK Version 1.0
开发代号为Oak(橡树),于1996-01-23发行。
JDK Beta
开发代号WebRunner,alpha 和 beta Java 公开版本,于1995研发。