http://www.infoq.com/cn/news/2014/09/java9

Java 9新特性汇总

继2014年3月份Java 8发布之后,Open JDK加快了开发速度, Java 9的发布已经提上日程。预计在2016年发布Java 9,同时公布了JEP(JDK改进提议)中的前期列表。任职于Takipi 的Alex Zhitnitsky整理了Java 9中一些纳入JSR(Java规范提案)的新特性和大家一直期待但未确定的一些特性。这些特性有Jigsaw项目、新的智能编译工具、期待已久的API(如简化了的进程API、JSON API、货币处理API等)、代码分段缓存等。

现就对这些特性进行了一个全面的梳理。

已接受的特性

1、 Jigsaw 项目:模块化JDK源码

Jigsaw项目即JEP201是为了模块化Java代码,并将JRE分成相互协作的组件。这个JEP是迈向Jigsaw四步中的第一步,它只是模块化JDK源代码,不会改变JRE和JDK的真实结构,从而使得编译系统能够模块编译并在构建时检查模块边界。这个项目原计划随Java 8发布,但因为推迟,所以被放到了Java 9中。Jigsaw项目一旦完成,将允许开发者根据项目的需要自定义组件,从而减少rt.jar的大小;还可以做到使Java能够更加容易的应用到小型计算设备(如网络设备)中,同时也能够使得开发者更加容易地构建和维护这些类库。更多相关信息参见JEP201。

2、简化了的进程API

目前,Java控制与管理系统进程的能力是有限的,为了获得操作系统的一些信息需要调用本地程序或者其他变通方案。然而,在Java 9中将会新增一些新的、直接明了的方法来处理进程ID、名字和状态以及枚举多个JVM和进程等,从而扩展Java与操作系统的交互能力。更多相关信息参见JEP102

3、 轻量级的JSON API

尽管目前有多种处理JSON的Java工具(如Google的Gson、阿里巴巴的FastJson、IBM的Json4J等),但JSON API是Java语言的一部分,轻量并且运用了Java 8的新特性。JSON API将放在java.util包里一起发布,这样,开发者就可以直接使用JDK而无需再引入第三方JSON工具包了。更多相关信息参见JEP198

4、 钱和货币的相关API

Java 9引入了新的货币API, 用来表示货币, 并支持币种之间的转换和各种复杂运算。更多的相关具体信息,参见JavaMoney项目JSR354

5、 改善锁争用机制

锁争用限制了许多Java多线程应用性能,新的锁争用机制改善了Java对象监视器的性能,并得到了多种基准测试的验证(如Volano),这类测试可以估算JVM的极限吞吐量。实际中, 新的锁争用机制在22种不同的基准测试中都得到了出色的成绩。如果新的机制能在Java 9中得到应用的话, 应用程序的性能将会大大提升。更多相关信息参见JEP143

6、代码分段缓存

Java 9的另一个性能提升来自于JIT(Just-in-time)编译器。当某段代码被大量重复执行的时候, 虚拟机会把这段代码编译成机器码(native code)并储存在代码缓存里面, 继而通过访问缓存中不同分段的代码来提升编译器的效率。代码分段缓存机制将会提升许多方面的性能,如当JVM进行垃圾回收扫描的时候,就可以直接跳过永驻代码,从而提升效率。更多相关信息参见JEP197

7、智能Java编译工具

智能Java编译工具(sjavac)的第一阶段始于JEP139这个项目, 用于在多核处理器情况下提升JDK的编译速度。如今,这个项目已经进入第二阶段即JEP199, 其目的是改进Java编译工具,并取代目前JDK编译工具javac,继而成为Java环境默认的通用的智能编译工具。更多相关信息参见JEP199。

期待但未确定的特性

1. HTTP 2.0客户端

虽然HTTP 2.0标准还没正式发布, 但是它已经进入了最终审查阶段,并预计将在Java 9发布之前审查完毕。HTTP 2.0客户端即JEP110将重新定义并实现一个全新的Java HTTP客户端, 用来取代现在的HttpURLConnection, 同时还会实现HTTP 2.0和WebSockets等接口。另外,官方的HTTP 2.0 RFC预计于2015年2月发布, 它基于Google的SPDY协议。基于SPDY协议的网络相对于基于HTTP 1.1协议的网络有11.81%到47.7%的显著提速。更多相关信息参见JEP110。

2. Kulla项目: Java的REPL实现

现在,Java官方并没有提供REPL(读取-求值-打印-循环)的实现。当我们需要运行几行Java代码做一个快速测试时, 我们不得不把这几行代码封装在项目或者方法里,才可以完成测试,而Kulla弥补了这些不足。Kulla将于2015年4月进行整合测试,如果Kulla进度比较快的话,或许能够加入到Java 9中,就有希望成为Java官方发布的REPL解决方案。更多关于Kulla的相关信息参见于Kulla的计划安排。

另外,请读者注意,JEP和JSR来自Java发展的生态环境,包括对特定技术内容有共同兴趣的组织和个人组成的小组、至少由一个小组赞助和支持的项目(如最近的Lambda项目、Jigsaw项目、Sumatra项目)、被正式认可的JEP以及JSR。

http://www.infoq.com/cn/news/2017/11/Java10JEPs

Java 10新特性前瞻

从Java 9发布到现在已经过去两个月了,根据最新的发布计划,距离下一个Java版本发布只有四个月时间。Java 10的新特性还在确认当中,所以从现在到GA版中间还是有可能加入重大的变更。不管怎样,在这四个月里,开发者还是可以期待一些新的特性能够被添加到Java 10中。

新的特性和增强一般通过Java Enhancement Process(JEP)或Java Community Process标准请求(JSR)进行跟踪。因为Java 10的时间线较短,范围也相对较小,所以Java 10的变更将通过JEP进行跟踪。

有望被包含在Java 10中的特性是那些已经处于Targeted或Proposed状态的JEP,它们包括:

  • 286:本地变量类型推断
  • 296:统一JDK仓库
  • 304:垃圾回收器接口
  • 307:G1的并行Full GC
  • 310:应用程序类数据共享
  • 312:ThreadLocal握手机制

JEP 296是一次纯粹的清理工作,而JEP 304加强了不同垃圾回收器的代码隔离,并为垃圾回收器引入更简洁的接口。

JEP 304意味着厂商可以更自由地选择特定的GC算法来构建JDK,因为现在有多种处于开发当中的GC,如ShenandoahZGCEpsilon,在未来可以使用这些GC算法。社区也在努力弃用甚至移除Concurrent Mark Sweep(CMS)垃圾回收器,只是目前还没有可用的替代品。

比较有意思的变更或许是JEP 286,增强的本地变量类型推断可以让开发者免去很多变量申明模板代码。也就是说,在下一个版本中,下面的变量声明是合法的:

var list = new ArrayList<String>();  // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>

这种语法只限于初始化过的本地变量和for循环中的本地变量。

它其实是个语法糖,在语义上并没有任何变化。不过,该特性有可能在Java开发者当中引起热议。

其他三个变更都将在性能方面带来一些影响。

JEP 307解决了G1垃圾回收器的一个问题——截止到Java 9,G1的Full GC采用的是单线程算法。也就是说,G1在发生Full GC时会严重影响性能。JEP 307的目的就是要采用并行GC算法,在发生Full GC时可以使用多个线程进行并行回收。

JEP 310对类数据共享(CDS)进行了扩展,JVM可以将一些类记录到一个共享的压缩文件里,在JVM下一次启动时可以将这个文件映射到JVM进程,以此来减少启动时间。该文件也可以在多个JVM间共享,在同一个机器上运行多个JVM时,这样做可以减少内存占用。

该功能在Java 5中就已存在,但截止到Java 9,该功能只允许bootstrap类加载器加载压缩的类。JEP 310的目的是扩展该功能,让应用程序和自定义类加载器也能加载压缩的类。该特性目前仅在Oracle JDK中可用,OpenJDK并不包含该特性。

JEP计划将该特性从Oracle私有仓库中迁移到公共仓库,从Java 10往后,常规版本(非LTS)将会使用OpenJDK的二进制包。此举表明有用户正在使用该特性,所以需要在OpenJDK中也支持该特性。

JEP 312旨在改进虚拟机性能,在应用程序线程上调用回调不再需要执行全局虚拟机安全点操作,这意味着JVM可以停止单个线程。一些底层小改进包括:

  • 降低堆栈跟踪取样所带来的影响(如进行profiling)。
  • 减少信号依赖以获得更好的堆栈取样。
  • 通过停止单独线程改进偏向锁。
  • 从JVM移除了一些内存屏障。

从整体来看,Java 10似乎并没有包含重大新特性或性能改进。这是可以理解的,毕竟这是新发布周期下的第一个版本。

Java 9和Java 10的新特性的更多相关文章

  1. Java 10 的 10 个新特性,将彻底改变你写代码的方式!

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  2. Java 10 的 10 个新特性,你颤抖了吗?

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  3. Java 10的10个新特性,将彻底改变你写代码的方式!

    Java 9才发布几个月,很多玩意都没整明白,现在Java 10又快要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,JDK 8 还没用熟,JDK 9 才发布不久不知道啥玩意,JDK ...

  4. Java 9中的 9个 新特性

    Java 9 中的 9个 新特性 java 7 2011发布,Java 8 2014发布,java9发布于2017年9月21日. 你可能已经听说过 Java 9 的模块系统,但是这个新版本还有许多其它 ...

  5. 夯实Java基础系列21:Java8新特性终极指南

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

  6. [转] Scala 2.10.0 新特性之字符串插值

    [From]  https://unmi.cc/scala-2-10-0-feature-string-interpolation/ Scala 2.10.0 新特性之字符串插值 2013-01-20 ...

  7. fir.im Weekly - 从 iOS 10 SDK 新特性说起

    从 iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 的分屏多任务特性,今年的 WWDC iOS 10 SDK ...

  8. 【ArcGIS 10.2新特性】ArcGIS Online新特性(上)

    概述 7月,ArcGIS Online发布了很多更新.主要内容有:新的网站设计,增强了Web制图,数据分析,应用程序创建,以及机构管理等功能. 更新的大致内容总结如下: 地图查看器:新的分析工具.获取 ...

  9. 【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)

    4 三维 4.1 共享三维场景         用户能够将ArcScene文档导出为3D web场景,能够被加载到ArcGIS Online.Portal或本地Web服务器上并进行分享.这样,用户可以 ...

随机推荐

  1. android 随手记 仿微信的popwindow

    /把文字控件添加监听,点击弹出自定义窗口 tv.setOnClickListener(new OnClickListener() { public void onClick(View v) { //实 ...

  2. 如何:在 DHTML 代码和客户端应用程序代码之间实现双向通信

    https://msdn.microsoft.com/zh-cn/library/a0746166 可以使用 WebBrowser 控件向 Windows 窗体客户端应用程序添加现有的动态 HTML ...

  3. 转:C#委托与事件

    委托与事件    Ganesh Nataraj最近写了一篇解释委托与事件的文章,在坊间流传较广,今天翻译成中文与大家共享,如有不妥之处,欢迎留言讨论.    C#中的委托类似于C或C++中的函数指针. ...

  4. DIY手机万能红外遥控器

    DIY手机万能红外遥控器 1.手机安装软件:遥控精灵 2.红外二极管两个(旧的遥控器里面可以拆) 3.耳机的插头一个 步骤:首选讲两个二极管的正负相接(即a二极管的正极连接b二极管的负极,a二极管的负 ...

  5. Android API之android.provider.ContactsContract.RawContacts

    android.provider.ContactsContract.RawContacts Constants for the raw contacts table, which contains o ...

  6. 【TP3.2】:日志记录和查看

    1.TP3.2手册日志类链接:http://document.thinkphp.cn/manual_3_2.html#log 2.日志默认路径:/Application/Runtime/Logs 3. ...

  7. StringBuilder.AppendFormat(String, Object, Object) 方法

    将通过处理复合格式字符串(包含零个或零个以上格式项)返回的字符串追加到此实例. 每个格式项都替换为这两个参数中任意一个参数的字符串表示形式. 说明: public StringBuilder Appe ...

  8. <转>字符编码笔记:ASCII,Unicode和UTF-8

    本文转自:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 今天中午,我突然想搞清楚Unicode和UTF-8之间 ...

  9. Android开发之5大布局方式详解

    Android中常用的5大布局方式有以下几种: 线性布局(LinearLayout):按照垂直或者水平方向布局的组件. 帧布局(FrameLayout):组件从屏幕左上方布局组件. 表格布局(Tabl ...

  10. 什么是FSK制式?什么是DTMF制式?

    目前国内来电显示制式有FSK.DTMF(双音频)两种,普通推广的是FSK."来电显示"又称"主叫号码显示"(Calling Identity Delivery) ...