如约而至,Java 10 正式发布:包含 109 项新特性
期待已久,没有跳票的 Java 10 已正式发布!你可以通过这里下载 Java 10 正式版。
此前我们曾报道过,为了更快地迭代,以及跟进社区反馈,Java 的版本发布周期变更为每六个月一次,并且承诺不会跳票。新的发布周期也会严格遵循时间点,将在每年的 3 月份和 9 月份发布。所以 Java 10 的版本号是 18.3。
Java 10 是采用新发布周期的第一个版本,提供了 109 项新特性,其中最备受关注的莫过于局部变量的类型推断。
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>
这样的 Java 代码你喜欢吗?
相关链接:
其他链接:
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
JDK 10 正式版下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html
其他资料:
Java 10的新特性
说了这么多,看Java 10都会有哪些特性来改变我们写代码的方式呢?!
1.局部变量类型推断
局部变量类型推断可以说是Java 10中最值得注意的特性,这是Java语言开发人员为了简化Java应用程序的编写而采取的又一步,如下图所示。

这个新功能将为Java增加一些语法糖 - 简化它并改善开发者体验。新的语法将减少与编写Java相关的冗长度,同时保持对静态类型安全性的承诺。
局部变量类型推断将引入"var"关键字,也就是你可以随意定义变量而不必指定变量的类型,如:
-
List <String> list = new ArrayList <String>(); -
Stream <String> stream = getStream();
将被下面这个新语法所取代:
-
var list = new ArrayList <String>(); -
var stream = getStream();
看完是不是有点JS的即视感???越来越像JS了吗?!虽然类型推断在Java中不是一个新概念,但在局部变量中确是很大的一个改进。
说到类型推断,从JDK 5引进泛型,到JDK 7的"<>"操作符允许不绑定类型而初始化List,再到JDK 8的Lambda表达式,再到现在JDK 10的局部变量类型推断,Java类型推断正大刀阔斧的向前发展。
-
// 该运算符允许在没有绑定ArrayList <>的类型的情况下初始化列表 -
List <String> list = new LinkedList <>();
局部变量类型推荐仅限于如下使用场景:
-
局部变量初始化
-
for循环内部索引变量
-
传统的for循环声明变量
Java官方表示,它不能用于以下几个地方:
-
方法参数
-
构造函数参数
-
方法返回类型
-
字段
-
捕获表达式(或任何其他类型的变量声明)
2.GC改进和内存管理
JDK 10中有2个JEP专门用于改进当前的垃圾收集元素。
第一个垃圾收集器接口是(JEP 304),它将引入一个纯净的垃圾收集器接口,以帮助改进不同垃圾收集器的源代码隔离。
预定用于Java 10的第二个JEP是针对G1的并行完全GC(JEP 307),其重点在于通过完全GC并行来改善G1最坏情况的等待时间。G1是Java 9中的默认GC,并且此JEP的目标是使G1平行。
3.线程本地握手(JEP 312)
JDK 10将引入一种在线程上执行回调的新方法,因此这将会很方便能停止单个线程而不是停止全部线程或者一个都不停。
4.备用内存设备上的堆分配(JEP 316)
允许HotSpot VM在备用内存设备上分配Java对象堆内存,该内存设备将由用户指定。
5.其他Unicode语言 - 标记扩展(JEP 314)
目标是增强java.util.Locale及其相关的API,以便实现语言标记语法的其他Unicode扩展(BCP 47)。
6.基于Java的实验性JIT编译器
Oracle希望将其Java JIT编译器Graal用作Linux / x64平台上的实验性JIT编译器。
7.根证书(JEP 319)
这个的目标是在Oracle的Java SE中开源根证书。
8.根证书颁发认证(CA)
这将使OpenJDK对开发人员更具吸引力,它还旨在减少OpenJDK和Oracle JDK构建之间的差异。
9.将JDK生态整合单个存储库(JEP 296)
此JEP的主要目标是执行一些内存管理,并将JDK生态的众多存储库组合到一个存储库中。
10.删除工具javah(JEP 313)
从JDK中移除了javah工具,这个很简单并且很重要。
转载来源:https://www.oschina.net/news/94402/java-10-released-mar-21?nocache=1521601201815

2691

被折叠的 条评论
为什么被折叠?



