Java 16 正式发布,已经是Java 8的两倍了

开发 后端
Oracle要感谢为ARM,SAP,Red Hat和腾讯等组织工作的开发人员所做的杰出贡献。我们也很高兴看到较小的组织(例如Ampere Computing,Bellsoft,DataDog,Microdoc和独立开发人员)的贡献,他们共同贡献了Java 16中3%的修复程序。

[[388014]]

就在刚刚,Java 16正式发布。

Java 16 正式发布

主要特性

Vector API(孵化)

提升了Java在CPU向量计算的性能,这是对大规模的张量计算的支持,提升了Java在AI领域的能力。

启用了新的C++特性

允许在JDK中C++源代码中使用 C ++ 14的新特性。

从 Mercurial 迁移到 Git

Git目前已经成为代码版本管理领域的绝对统治者,现在Java顺应潮流也使用Git进行源代码管理。

迁移到GitHub

OpenJDK的代码现在由GitHub托管。

ZGC垃圾收集器

并发线程堆栈处理的垃圾收集器。

Unix域套接字通道

Unix域套接字对ServerSocketChannel和SocketChannel的支持。

Alpine Linux Port

在x64和AArch64体系结构上,将JDK移植到Alpine Linux以及其它使用musl C库的Linxu发行版上。

Elastic Metaspace

Hotspot对类元数据的处理(metaspace-元空间)有了很大的改进。占用空间减少了,现在可以更快地将未使用的内存回收到操作系统。

Windows/AArch64 Port

将 JDK 移植到 Windows / AArch64平台。

Foreign Linker API(孵化)

引入一个API,该API提供对本地代码的静态类型的纯Java访问。该API与Foreign-Memory API(JEP 393)一起将大大简化绑定到本机库的原本容易出错的过程。

Warnings for Value-Based Classes

将原始包装器类指定为*基于值的类,*并弃用其构造函数以将其删除,从而提示新的弃用警告。提供有关在Java平台中不正确尝试在任何基于值的类的实例上进行同步的警告。

Packaging Tool

提供jpackage用于打包独立Java应用程序的工具。

  • 支持本地打包格式,以为最终用户提供自然的安装体验。这些格式包括msi与exe在Windows,pkg并dmg在MacOS,以及deb和rpm在Linux上。
  • 允许在打包时指定启动时间参数。
  • 可以从命令行直接调用,也可以通过ToolProviderAPI以编程方式调用。

Foreign-Memory Access API (第三次孵化)

引入一个API,允许Java程序安全有效地访问Java堆之外的外部内存。

Pattern Matching for instanceof

在此之前 Java 中:

  1. // 先判断类型 
  2. if (obj instanceof String) { 
  3.     // 然后转换 
  4.     String s = (String) obj; 
  5.     // 然后才能使用 

自动匹配模式中:

  1. if (obj instanceof String s) { 
  2.     // 如果类型匹配 直接使用 
  3. else { 
  4.     // 如果类型不匹配则不能直接使用 

Records Class

终于转正了,Java类不再又臭又长。原来是这样的:

  1. public class Range { 
  2.  
  3.     private final int min
  4.     private final int max
  5.  
  6.     public Range(int minint max) { 
  7.         this.min = min
  8.         this.max = max
  9.     } 
  10.  
  11.     public int getMin() { 
  12.         return min
  13.     } 
  14.  
  15.     public int getMax() { 
  16.         return max
  17.     } 
  18.  
  19.     @Override 
  20.     public boolean equals(Object o) { 
  21.         if (this == o) return true
  22.         if (o == null || getClass() != o.getClass()) return false
  23.         Range range = (Range) o; 
  24.         return min == range.min && max == range.max
  25.     } 
  26.  
  27.     @Override 
  28.     public int hashCode() { 
  29.         return Objects.hash(minmax); 
  30.     } 
  31.  
  32.     @Override 
  33.     public String toString() { 
  34.         return "Range{" + 
  35.           "min=" + min + 
  36.           ", max=" + max + 
  37.           '}'
  38.     } 

现在可以简化为:

  1. public record Range(int minint max) {} 

以往的文章有详细介绍。Java 14 新特性之JEP 359: Records(Preview)

默认情况下严格封装JDK

提高JDK的安全性和可维护性,跟普通开发者无关。

Sealed Classes

密封类,简单说就是被final修饰的类,密封类不能被继承,防止了恶意的派生。

另外Oracle发文对参与JDK 16贡献的公司和个人进行了感谢。

Oracle要感谢为ARM,SAP,Red Hat和腾讯等组织工作的开发人员所做的杰出贡献。我们也很高兴看到较小的组织(例如Ampere Computing,Bellsoft,DataDog,Microdoc和独立开发人员)的贡献,他们共同贡献了Java 16中3%的修复程序。

我们同样感谢许多经验丰富的开发人员,他们审查了建议的更改,尝试采用早期访问版本并报告问题的早期采用者,以及在OpenJDK邮件列表中提供反馈的敬业专业人员。

 

参与JDK16处理Issues的组织

本文转载自微信公众号「码农小胖哥」,可以通过以下二维码关注。转载本文请联系码农小胖哥公众号。

 

责任编辑:武晓燕 来源: 码农小胖哥
相关推荐

2015-12-07 09:23:13

PHP 7速度正式发布

2012-07-12 10:46:39

微软

2014-04-10 11:27:30

DartDart SDK

2022-05-31 09:10:06

jQuery前端开发工具

2015-06-18 11:14:02

AndroidiOS应用下载

2015-08-03 17:21:26

APP

2019-08-14 14:13:45

戴尔

2009-08-21 18:55:59

Windows 7市场份额

2010-05-24 10:58:19

2014-03-19 11:04:14

Java 8Java8特性

2011-11-09 09:24:54

Fedora 16

2020-12-24 19:01:27

戴尔

2022-03-31 09:28:39

Java代码字符串split()切割字

2009-06-03 09:16:54

FirefoxMozilla浏览器

2023-05-26 09:57:41

物联网IOT

2021-07-12 14:40:59

以太坊区块链ETH2.0

2022-12-05 14:50:53

2016-11-17 17:14:17

腾讯云财报云服务

2018-11-23 10:48:04

云计算开源云服务

2021-03-19 18:12:15

Java语言IT
点赞
收藏

51CTO技术栈公众号