JDK新特性

Posted by t298 on January 7, 2022

JDK

JDK 全称 Java Development Kit,是 Java 开发环境。我们通常所说的 JDK 指的是 Java SE (Standard Edition) Development Kit。除此之外还有 Java EE(Enterprise Edition)和 Java ME(Micro Edition platforms)。

  • 1995 年 alpha 和 beta Java 公开版本发布,取名为 WebRunner。

  • 1996.1.23 Java 第一个版本发布,取名叫 Oak。但是第一个稳定版本是 JDK 1.0.2,被称做 Java 1

  • 1998.12.8 发布了 J2SE 1.2。这个版本到 J2SE 5.0 更名为 Java 2。其中的 SE 指的是 Standard Edition,为了区别于 J2EE(Enterprise Edition)和 J2ME(Micro Edition)。

  • 2000.5 发布了 J2SE 1.3,其中包含了 HotSpot JVM。而 HotSpot JVM 首次发布是在 1999.4,名为 J2SE 1.2 JVM。

  • 2004.9.30 发布了 J2SE 5.0。为什么这个版本命名和前面几个版本不一样呢?这个版本原本计划以 1.5 命名的,沿用以前的命名方式。但是为了更好的反映这个版本的成熟度,所以改名为 5.0。 这个版本以后,有了一个新的版本控制系统,5.0 用来表示产品版本,用来表示稳定的 J2SE 版本,而 1.5.0 用来表示开发者版本,也就是 Java 5.0 = JDK 1.5.0。

  • 2006.12.11,J2SE 改名为 Java SE,版本号去掉了 .0。此后对应版本就是 Java 6 = JDK 1.6,Java 7 = JDK 1.7。

  • 2011.7.7. 发布 Java SE 7,是一个重大版本更新。更新了众多特性。

  • 2018.3 发布 Java SE 10。在此之前,Java 基本上是两年一个版本,除了 Java SE 7 经过了五年,Java SE 8 经过了三年。在此之后,就是每六个月发布一次新版本。但是不是每个版本都是 LTS(Long-Term-Support)。按照 Oracle 的计划,每三年会有一个 LTS 版本。最近的 LTS 版本就是 Java SE 11 了。

OpenJDK VS Oracle JDK

OpenJDK 是 在 2007 年由 Sun Corporation(现在的Oracle Corporation) 发布的。是 Oracle JDK 的开源实现版本,以 GPL 协议发布。在 JDK 7 的时候,Sub JDK 就是在 Open JDK 7 的基础上发布的,只替换了少量的源码。在 Sun 公司被 Oracle 收购以后,Sun SDK 就被称为 Oracle JDK。Oracle JDK 是基于 Oracle Binary COde License Agreement 协议。 两者的区别如下:

  1. Oracle JDK 将三年发布一次稳定版本,OpenJDK 每三个月发布一次。
  2. Oracle JDK 支持 LTS,OpenJDK 只支持当前版本至下一个版本发布。
  3. Oracle JDK 采用 Oracle Binary Code License 协议,OpenJDK 采用 GPL v2 协议。
  4. Oracle JDK 基于 OpenJDK 构建,技术上基本没有差异。

java8

  1. Lambda 和 函数式接口
  2. 方法引用
  3. 接口默认方法和静态方法
  4. 重复注解
  5. 类型注解
  6. Stream
  7. 日期时间 API
  8. Base64 支持
  9. 并行数组 ParallelSort

java9

  1. Jigsaw 模块系统
  2. JShell REPL
  3. 接口中使用私有方法
  4. 集合不可变实例工厂方法
  5. 改进 try-with-resources
  6. 多版本兼容 jar 包
  7. 增强 @Deprecated
  8. 增强了钻石操作符 “<>”,可以在 匿名内部类中使用了。

java10

  1. 新增局部类型推断 var
  2. 删除工具 javah
  3. 一的垃圾回收接口,改进了 GC 和其他内务管理
  4. ThreadLocal 握手交互

java11

  1. Lambda 表达式中使用 var
  2. 字符串 API 增强
  3. 标准化 HttpClient API
  4. java 命令直接编译并运行 java 文件,省去先 javac 编译生成 class 再运行的步骤
  5. 增加对 TLS 1.3 的支持

java12

  1. switch 表达式
  2. 默认CDS归档
  3. Shenandoah GC