随着Java开发工具包(JDK)9的发布,大量的注意力都集中在Java的最新特性上,包括引入模块(通过集成项目Jigsaw)。尽管最近的很多关注都集中在这些强大的新功能上,但下一个版本的Java:JDK 10已经开始准备了。在本文中,我们将粗略地介绍一下JDK 10的主要特性,并探讨JDK 10中可能包含的一些特性。

请注意,本文中所包含的信息在写本文时是准确的。但是到发布时,JDK 10特性组预计将会增加。

新功能

与之前的JDK版本一样,对于即将到来的JDK 10也有一些主要特性。这些特性可以分为两个主要类别:(1)目标发布,(2)建议发布。前者表示某些特性已计划在JDK 10中发布,后一种类型表示这些特性还需要增加支持和成熟度。一旦条件允许,它就可以升级为一个目标发布状态。

目标发布

目前有两个主要功能针对JDK 10:

(1)局部变量类型推断,这将删除大部分对象实例化所需的冗长的包含手动类型信息
(2)整合源树source tree的JDK库,即不同的JDK库将被合并成一个单一的存储库。

1.局部变量类型推断

强类型编程语言有很多优点,包括在编译时发现类型错误,但是它们也引入了大量的样板代码,特别是在定义局部变量时。例如,当我们希望实例化一个对象时,我们被迫在赋值的左侧提供显式类型,并在赋值的右边提供实现类型,如下面的片段所示:

MyObject value = new MyObject();

但是,当这个过程重复出现大量任务时,对象实例化可能变得令人沮丧和乏味。许多最流行的强类型的编程语言,比如C++, C#以及Go,在定义过程中,提供一种局部变量类型推断的功能(例如C++提供了auto 关键字,C#提供var关键字)。但是,Java仍缺乏这样的功能,它要求开发人员显式声明变量的预期清单类型。为了解决这个问题,Java开发工具包(JDK)改进建议(JEP)286提出了一个上下文敏感的关键字var,允许局部变量被以下方式初始化:

var value = new MyObject();
var list = new ArrayList();

由于var关键字是上下文敏感的,它的使用有下面的规则定义:

代码使用var作为一个变量、方法或包名称时将不受影响;而使用var作为类或接口名称的代码将受到影响。

同样,类型推断将受到以下方式的约束:

推断类型将被限制在局部变量的初始化,增强的for循环索引,以及传统的for循环中声明;它(将)不用于方法形式、构造函数形式、方法返回类型、字段、捕获形式,或任何其他类型的变量声明。

考虑到所有的限制和细微差别,这个特性将有助于在开发人员创建的应用程序Java代码中减轻大量的单调无聊的动作,并简化JDK代码库。更多信息可以在官方的JEP 286规范中找到。

2.整合的JDK库

目前,有8个不同的Mercurial存储库用于存储包含JDK的大量源代码:(1)root,(2)corba,(3)hotspot,(4)jaxp,(5)jaxws,(6)JDK,(7)langtools,(8)nashorn。虽然过多的存储库提供了对组成JDK的各种组件并清晰分离,但管理多个存储库存在一些主要的缺点。

其中最重要的一点是,在JDK的两个不同部分,单个错误修复程序不能被原子跟踪。例如,如果一个bug修复需要对独立存储库中包含的系统的两个部分进行更改,那么必须提交两个提交:每个存储库中一个。这种不连续性很容易地降低项目和源代码管理工具的可跟踪性和复杂性。

为了解决这个问题,JEP 296建议将所有现有存储库合并到一个Mercurial存储库中。这种合并的一个次生效应是,这个单一的Mercurial存储库比现有的8个存储库要更容易的被镜像(作为一个Git存储库)。虽然在这个整合过程中,外部开发人员有一些阻力,但是JDK开发团队似乎已经致力于使这一更改成为JDK 10的一部分。有关更多信息,请参见JEP 296,并提议整合由Michael Redlich发布的JDK 10 OpenJDK Mercurial存储库声明。

建议发布

除了两个目标特性之外,JDK 10目前还有三个建议,其中两个主要是对JDK的垃圾收集器部分进行升级,另一个侧重于对JDK的本地线程功能进行升级。

1.清理垃圾收集接口

在当前的JDK结构中,组成垃圾收集器(GC)实现的组件分散在代码库的各个部分。尽管这些惯例对于使用GC计划的JDK开发者比较熟悉,但对新的开发人员来说,对于特定GC的源代码,或者创建一个新的GC常常会感到困惑。更重要的是,随着Java modules的出现,我们希望在构建过程中排除不需要的GC,但是GC接口的当前横切结构排除了这种增强。

JEP 304被设计为解决此问题的方案,并建议整合并清理GC接口,以便更容易地实现新的GC,并更好地维护现有的GC。本建议完成后,GC执行将负责提供以下内容:

  • heap,CollectedHeap的子类
  • barrier set,BarrierSet的子类,它实现了运行时的各种障碍
  • 一个CollectorPolicy的实现
  • GCInterpreterSupport的实现,它实现了解释器的GC的各种障碍(使用汇编指令)
  • GCC1Support的实现,它为C1编译器实现了GC的各种障碍
  • GCC2Support的实现,它为C2编译器实现了GC的各种障碍
  • 最终GC特定参数的初始化
  • 设置MemoryService、相关的内存池、内存管理器等。

有关这些更改的更多信息,请参见JEP 304规范;有关Java GC的更多信息,请参阅Oracle提供的垃圾收集器基础指南。

2.G1垃圾收集器并行化

随着JDK 9的发布,Garbage-First(G1)GC取代了Parallel Collector作为默认GC。为了减少JDK 9之外的JDK版本中垃圾收集的影响,G1收集器将被并行化(以匹配并行收集器的特征)。虽然目前还没有关于这个并行化的实现细节的信息,但是可以在JEP 307规范中找到关于此更改的更多细节。有关GC实现的更多信息,请参阅Oracle的G1指南和并行收集器指南。

3.项目线程局部握手

当前,停止Java线程是一个“全部或没有”的过程,需要一个Java虚拟机(JVM)的安全点,以使一个线程停止。为了让单独的线程停止,JEP 312提议将回调包含到线程中。这一更改受到了限制,因为它显著地提高了现有JVM功能的性能开销,并且改变了到达JVM全局安全点的现有时间语义。有关这个建议的更多信息,请参阅JEP 312的Thread-Local Handshake OpenJDK讨论。

结论

尽管JDK 9对于许多Java开发人员非常新鲜,但它的发展并没有停止。特别是,JDK 10承诺为局部变量实例化引入类型推断机制,并将现有的JDK存储库合并到一个Mercurial存储库中。此外,在更成熟和更支持的情况下,JDK 10还可能包括一些重要的升级到GC接口和默认的GC实现,以及升级到JVM中单个线程的可寻址能力。虽然JDK 10的发布在未来仍然相对较远,而且包含的特性很可能会增加,但它已经承诺将大量的内容带入其中,并且很可能成为Java时间轴上的一个重要里程碑。

原文链接:What’s Planned for JDK 10?(责编/魏伟)

Java 10新特性解密相关推荐

  1. Java 10新特性

    Java 10新特性 Java 10是其23年历史中最快的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这一概念.Java 10是一个具有许多未来变化的版本,其范围和 ...

  2. Java 10 新特性概述

    Java 10是其23年历史中最快发布的java版本.Java因其缓慢的增长和发展而受到批评,但Java 10刚刚破坏了这个概念.Java 10是一个具有许多未来变化的版本,其范围和影响可能并不明显, ...

  3. 最通俗易懂的 Java 10 新特性讲解 | 原力计划

    作者 | 未读代码,CSDN 博主 封图 | CSDN 下载自 VCG 出品 | CSDN 博客 自从 Java 9 开始,Oracle 调整了 Java 版本的发布策略,不再是之前的 N 年一个大版 ...

  4. Java 10 新特性介绍

    作为当今使用最广泛的编程语言之一的 Java 在 2018 年 3 月 21 日发布了第十个大版本.为了更快地迭代.更好地跟进社区反馈,Java 语言版本发布周期调整为每隔 6 个月发布一次.Java ...

  5. IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

    文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...

  6. stream distinct去重_再来看看Java的新特性——Stream流

    半年前开始试着使用Java的新特性,给我印象最深的就是Stream流和Optional.其中Stream提高了看法效率,让代码看起来十分清爽. 为什么要使用流? 摘要中已经说明了,为了提高开发效率.流 ...

  7. Java 8新特性探究(二)深入解析默认方法

    转载自 Java 8新特性探究(二)深入解析默认方法 什么是默认方法,为什么要有默认方法 简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法.只需在方法名前面加个default关键字即可. ...

  8. Java 8新特性——default方法(defender方法)介绍

    转载自 Java 8新特性--default方法(defender方法)介绍 我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码.接口中定义的方法必须在接口的非抽象子类中实现 ...

  9. Java 9 新特性概述

    转载自 Java 9 新特性概述 Java 9 正式发布于 2017 年 9 月 21 日 .作为 Java8 之后 3 年半才发布的新版本,Java 9 带 来了很多重大的变化.其中最重要的改动是 ...

最新文章

  1. “智源 — INSPEC 工业大数据质量预测赛” 上线,为硬核工业制造炼就 AI 之心...
  2. Java 的类加载顺序
  3. java jvm 参数 -Xms -Xmx -Xmn -Xss 调优总结
  4. JavaScript Object对象
  5. 听说用 Lombok 可以早点下班?
  6. html css position,[CSS]CSS Position 详解
  7. 电脑安装python后开不了机_ubuntu 安装python3.6后,terminal终端打不开问题
  8. java中如果需要返回多个值怎么办
  9. linux有关信号的FAQ
  10. gerrit与crowdid, openid集成,设置openIdSsoUrl 直接登录
  11. KB4484127 更新导致ACCESS数据库查询报 Query '' is corrupt 异常解决方案
  12. 《出版专业基础(初级)》2020版学习笔记2~8章
  13. 固态硬盘的计算机需要进行磁盘碎片整理吗,有问有答:固态硬盘需要磁盘碎片整理吗?...
  14. 基于Rust-vmm实现Kubernetes运行时
  15. Opencv中视频播放与进度控制
  16. U盘插到电脑上无反应怎么办?
  17. 修改系统时区(基于Debian的系统)--用Enki学Linux系列(15)
  18. React全家桶写一个CNode社区,奉上心得与源码
  19. python(x,y)安装和使用
  20. 华为魔术magic2拆机图_荣耀Magic拆解

热门文章

  1. mysql数据库 auto_increment_mysql数据库 auto_increment
  2. unet作为服务器不显示画面,UNet:无法生成服务器对象(不使用NetworkManager)
  3. 鸿蒙os2.0公测机型,鸿蒙OS2.0第二期第三期公测机型陆续公布 麒麟980和麒麟820将登场...
  4. 《AI 3.0》作者梅拉妮·米歇尔:今天的机器距离真正像人一样理解世界还有多远...
  5. 数学到底有多重要?网友:道理都懂,实力不允许啊
  6. 站在前人的肩膀上,新一代数学家正在崛起
  7. 14位顶级哲学家对生命的经典感悟!若能领悟受益终生!
  8. 拉普拉斯方程之美:万物的数学之匙
  9. NSA-LDL论文修改建议20211116(R-T Bai)
  10. ajax可以发送文件,通过Ajax上传img时如何发送文件信息