来自:开源中国
链接:oschina.net/news/94402/java-10-released-mar-21

期待已久,没有跳票的 Java 10 已正式发布!你可以下载 Java 10 正式版:

http://www.oracle.com/technetwork/java/javase/downloads/index.html
<http://www.oracle.com/technetwork/java/javase/downloads/index.html>

http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html

<http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html>

此前我们曾报道过,为了更快地迭代,以及跟进社区反馈,Java 的版本发布周期变更为每六个月一次,并且承诺不会跳票。新的发布周期也会严格遵循时间点,将在每年的
3 月份和 9 月份发布。所以 Java 10 的版本号是 18.3。

Java 10 是采用新发布周期的第一个版本,提供了 109 项新特性,其中最备受关注的莫过于局部变量的类型推断。

Java 10 的 12 项关键新特性:

JEP 286: 局部变量的类型推断。该特性在社区讨论了很久并做了调查,可查看 JEP 286 调查结果
JEP 296: 将 JDK 的多个代码仓库合并到一个储存库中
JEP 304: 垃圾收集器接口。通过引入一个干净的垃圾收集器(GC)接口,改善不同垃圾收集器的源码隔离性。
JEP 307: 向 G1 引入并行 Full GC
JEP 310: 应用类数据共享。为改善启动和占用空间,在现有的类数据共享(“CDS”)功能上再次拓展,以允许应用类放置在共享存档中
JEP 312: 线程局部管控。允许停止单个线程,而不是只能启用或停止所有线程
JEP 313: 移除 Native-Header Generation Tool (javah)
JEP 314: 额外的 Unicode 语言标签扩展。包括:cu (货币类型)、fw (每周第一天为星期几)、rg (区域覆盖)、tz (时区) 等
JEP 316: 在备用内存设备上分配堆内存。允许 HotSpot 虚拟机在备用内存设备上分配 Java 对象堆
JEP 317: 基于 Java 的 JIT 编译器(试验版本)
JEP 319: 根证书。开源 Java SE Root CA 程序中的根证书
JEP 322: 基于时间的版本发布模式。“Feature releases” 版本将包含新特性,“Update releases” 版本仅修复 Bug

Java 10 的 109 项新特性一出,社区就有热心用户翻译成了中文版,在此感谢他们的努力,下面我们来看看这 109 项新特性都有哪些?

原文:109 New Features In JDK 10
链接:https://www.azul.com/109-new-features-in-jdk-10/
<https://www.azul.com/109-new-features-in-jdk-10/>
译文:https://www.oschina.net/translate/109-new-features-in-jdk-10
<https://www.oschina.net/translate/109-new-features-in-jdk-10>
译者:雪落无痕xdj, dreamanzhao, Tocy, machogyb, 虚拟现实首席幻想师, rever4433

JDK 10 的 109 项新特性

突然然感觉 JDK9 发布才仅仅几周的时间,然而,随着新的 OpenJDK 的发布节奏,JDK10 已经到达发布候选里程碑阶段。

我看过各种关于 JDK10 新特性的博客,但是它们都倾向于关注通过 JEPS 定义的大方面。这篇博文,我将看看是否可以罗列出 JDK10
中已经发生变化的方方面面(包括新增的和剔除的)。

有时候,我会做一些关于 Java SE 的报告会。之前我在“ JDK9 的 55 个新特性”的报告会上曾开玩笑说:下次我将做的恐怕是“ JDK10 的 5
个新特性”。然而事实证明,即使仅有六个多月的开发时间,JDK10 依然超乎想象。

即便我不再为 Oracle 工作,我也在此先做一个“安全港声明”,以便消除误会。这个列表是由下面这些公开可用的信息整理编辑的:JDK Enhancement
Proposals (JEPs)、the OpenJDK bug database 和 Java SE 10 public review
specification (JSR 383) 。当然,尽管我已尽可能的研究以保证信息准确,但在 JDK 10 最终发布之前仍可能会发生变化。

大事记

JDK10 包含 12 个JEP (改善提议):

【286】局部变量类型推断 :对于开发者来说,这是 JDK10 唯一的真正特性。它向 Java 中引入在其他语言中很常见的 var ,比如
JavaScript 。只要编译器可以推断此种类型,你不再需要专门声明一个局部变量的类型。一个简单的例子是:
var x = new ArrayList<String>();
这就消除了我们之前必须执行的 ArrayList 类型定义的重复。我鼓励你们去读 JEP ,因为上面有一些关于这个句法是否能用的规则。

有趣的是,需要注意 var 不能成为一个关键字,而是一个保留字。这意味着你仍然可以使用 var
作为一个变量,方法或包名,但是现在(尽管我确定你绝不会)你不能再有一个类被调用。

[310]应用类数据共享(CDS) :CDS 在 JDK5 时被引进以改善 JVM
启动的表现,同时减少当多个虚拟机在同一个物理或虚拟的机器上运行时的资源占用。

JDK10 将扩展 CDS 到允许内部系统的类加载器、内部平台的类加载器和自定义类加载器来加载获得的类。之前,CDS 的使用仅仅限制在了 bootstrap
的类加载器。

[314]额外的 Unicode 语言标签扩展:这将改善 java.util.Locale 类和相关的 API 以实现额外 BCP 47 语言标签的
Unicode 扩展。尤其是,货币类型,一周的第一天,区域覆盖和时区等标签现在将被支持。

[322]基于时间的版本控制:正如我在之前的博客中所讨论的,我们的 JDK 版本字符串格式几乎与 JDK
版本一样多。有幸的是,这是最后需要使用到的,我们可以坚持用它。这种格式使用起来很像 JDK9 中介绍的提供一个更加语义的形式。有一件困扰我的事是包含了一个
INTERIM 元素,正如 JEP
提议中所说,“永远是0”。好吧,如果永远是0,那它有什么意义呢?他们说这是为未来使用做保留,但我仍不是很赞同。我认为,这有些冗余繁杂。

这也消除了在 JDK9 中有过的相当奇怪的情形。第一次更新是 JDK 9.0.1 , 非常符合逻辑。第二次更新是 JDK 9.0.4 ,不合逻辑。原因是,在
JDK9 的版本计数模式下,需要留下空白以便应急或不在预期安排的更新使用。但既然没有更新是必须的,为什么不简单称之为 JDK 9.0.2 呢?

[319]根证书:在 JDK 中将提供一套默认的 CA 根证书。关键的安全部件,如 TLS ,在 OpenJDK 构建中将默认有效。这是 Oracle
正在努力确保 OpenJDK 二进制和 Oracle JDK 二进制功能上一样的工作的一部分,是一项有用的补充内容。

[307] 并行全垃圾回收器 G1 : G1 是设计来作为一种低延时的垃圾回收器(但是如果它跟不上旧的堆碎片产生的提升速率的话,将仍然采用完整压缩集合)。在
JDK9 之前,默认的收集器是并行,吞吐,收集器。为了减少在使用默认的收集器的应用性能配置文件的差异,G1 现在有一个并行完整收集机制。

[313]移除 Native-Header 自动生成工具:Java9 开始了一些对 JDK 的家务管理,这项特性是对它的延续。当编译 JNI
代码时,已不再需要单独的工具来生成头文件,因为这可以通过 javac 完成。在未来的某一时刻,JNI 将会被 Panama
项目的结果取代,但是何时发生还不清楚。

[304]垃圾回收器接口: 这不是让开发者用来控制垃圾回收的接口;而是一个在 JVM 源代码中的允许另外的垃圾回收器快速方便的集成的接口。

[312]线程-局部变量管控:这是在 JVM
内部相当低级别的更改,现在将允许在不运行全局虚拟机安全点的情况下实现线程回调。这将使得停止单个线程变得可能和便宜,而不是只能启用或停止所有线程。

[316]在备用存储装置上的堆分配:硬件技术在持续进化,现在可以使用与传统 DRAM 具有相同接口和类似性能特点的非易失性 RAM 。这项 JEP 将使得
JVM 能够使用适用于不同类型的存储机制的堆。

[317] 试验性的基于 Java 的 JIT 编译器:最近宣布的 Metropolis 项目,提议用 Java 重写大部分 JVM
。乍一想,觉得很奇怪。如果 JVM 是用 Java 编写的,那么是否需要一个 JVM 来运行 JVM ? 相应的,这导致了一个很好的镜像类比。
现实情况是,使用 Java 编写 JVM 并不意味着必须将其编译为字节码,你可以使用 AOT 编译,然后在运行时编译代码以提高性能。

这项 JEP 将 Graal 编译器研究项目引入到 JDK 中。并给将 Metropolis 项目成为现实,使 JVM 性能与当前 C++
所写版本匹敌(或有幸超越)提供基础。

[296]: 合并 JDK 多个代码仓库到一个单独的储存库中:在 JDK9 中,有 8 个仓库:
root、corba、hotspot、jaxp、jaxws、jdk、langtools 和 nashorn 。在 JDK10
中这些将被合并为一个,使得跨相互依赖的变更集的存储库运行 atomic commit (原子提交)成为可能。

新 API

有 73 项新增内容添加到了标准类库中。

java.awt.Toolkit
int getMenuShortcutKeyMaskEx(): 确定哪个扩展修饰符键是菜单快捷键的适当加速键。

java.awt.geom.Path2D:
void trimToSize(): 将此 Path2D 实例的容量计算到它当前的大小。应用可使用此操作将路径的存储空间最小化。这个方法也被添加到
Path2D.Double 和 Path2D.Float 类。

java.io.ByteArrayOutputStream:
String toString(Charset): 重载 toString(),通过使用指定的字符集解码字节,将缓冲区的内容转换为字符串。

java.io.PrintStream:
lang.io.PrintWriter:
这两个类都有三个新的构造函数,它们需要额外的 Charset 参数。

java.io.Reader:
long transferTo(Writer): 从这个 Reader 中读取所有字符,并按照所读的顺序将字符写入给定的 Writer 。

java.lang.Runtime.Version:
有四种新方法返回新(JEP 322)版本字符串字段的整数值: feature()、interim()、patch() 和 update() 。

java.lang.StackWalker.StackFrame:
String getDescriptor(): 按照 JVM 标准返回此堆栈帧所代表的方法的描述符。
String getMethodType():返回此堆栈帧所代表的方法类型,描述参数类型和返回值类型。

java.lang.invoke.MethodType:
Class

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信