千唤万唤始出来:Java 9终极特性列表

开发 后端
这些重要的特性都包括在Jigsaw项目中。显著的性能改善和期待已久的API包括:进程API更新,JSON将成为java.util的一部分,货币处理API.对于想处在技术最前沿的你,可从这里获得Java 9的初期版本.

[[119906]] 

本文会根据针对即将发布的Java 9新特性做同步更新(***更新:9/9/2014)

加快OpenJDK的开发速度: 继2014年3月份发布了Java 8之后,我们进入下一个两年的发布周期. Java 9预计在2016年发布,并且已经公布了JEP(JDK改进提议)中的前期列表.同时,我们已经把一些新特性整理到了JSR(Java规范请求),还有提出了一些希望包括在新版本中的其他特性.

这些重要的特性都包括在Jigsaw项目中。显著的性能改善和期待已久的API包括:进程API更新,JSON将成为java.util的一部分,货币处理API.对于想处在技术最前沿的你,可从这里获得Java 9的初期版本.

本文将根据Java 9的新特性做持续更新。敬请关注!

被接受的特性

1. Jigsaw 项目;模块化源码

Jigsaw项目是为了模块化Java代码、将JRE分成可相互协作的组件,这也是Java 9 众多特色种的一个。JEP是迈向Jigsaw四步中的***步,它不会改变JRE和JDK的真实结构。JEP是为了模块化JDK源代码,让编译系统能够模块编译并在构建时检查模块边界。这个项目原本是随Java 8发布的,但由于推迟,所以将把它加到Java 9.

一旦它完成,它可能允许根据一个项目需求自定义组件从而减少rt.jar的大小。在JDK 7 和JDK 8的rt.jar包中有大约20,000个类,但有很多类在一些特定的环境里面并没有被用到(即使在Java 8的紧凑分布特性中已经包含了一部分解决方法也存在着类冗余)。这么做是为了能让Java能够容易应用到小型计算设备(比如网络设备)中,提高它的安全和性能,同时也能让开发者更容易构建和维护这些类库。

More about JEP 201

2. 简化进程API

截止到目前,Java控制与管理系统进程的能力是有限的。举个例子,现在为了简便获取你程序的进程PID,你要么调用本地程序要么要自己使用一些变通方案。更多的是,每个(系统)平台需要有一个不同实现来确保你能获得正确的结果。

期望代码能获取Linux PIDS,现在是如下方式:

  1. public static void main(String[] args) throws Exception  
  2. {  
  3.     Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh""-c""echo $PPID" });  
  4.    
  5.     if (proc.waitFor() == 0)  
  6.     {  
  7.         InputStream in = proc.getInputStream();  
  8.         int available = in.available();  
  9.         byte[] outputBytes = new byte[available];  
  10.    
  11.     in.read(outputBytes);  
  12.     String pid = new String(outputBytes);  
  13.    
  14.     System.out.println("Your pid is " + pid);  
  15.     }  

在Java 9中,可以变换成如下方式(支持所有的操作系统):

  1. System.out.println("Your pid is " + Process.getCurrentPid()); 

这次更新将会扩展Java与操作系统的交互能力:新增一些新的直接明了的方法去处理PIDs,进程名字和状态以及枚举多个JVM和进程以及更多事情。

3. 轻量级 JSON API

 

目前有多种处理JSON的Java工具,但JSON API 独到之处在于JSON API将作为Java语言的一部分,轻量并且运用Java 8的新特性。它将放在java.util包里一起发布(但在JSR 353里面的JSON是用第三方包或者其他的方法处理的).

**代码例子稍后列出!

4. 钱和货币的API

在Java 8引进了日期和时间的API之后, Java 9引入了新的货币API, 用以表示货币, 支持币种之间的转换和各种复杂运算. 关于这个项目的具体情况, 请访问https://github.com/JavaMoney,里面已经给出了使用说明和示例, 以下是几个重要的例子:

  1. //新的类型: Money & FastMoney  
  2.    
  3. Money amt1 = Money.of(10.1234556123456789"USD"); // Money is a BigDecimal  
  4. FastMoney amt2 = FastMoney.of(123456789"USD"); // FastMoney is up to 5 decimal places  
  5. Money total = amt1.add(amt2); 
  1. // 钱表达成各国货币的方法:  
  2.    
  3. MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat(  
  4. Locale.GERMANY);  
  5.    
  6. System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD 

更多关于 JSR 354的内容

5. 改善锁争用机制

锁争用是限制许多Java多线程应用性能的瓶颈. 新的机制在改善Java对象监视器的性能方面已经得到了多种基准(benchmark)的验证, 其中包括Volano. 测试中通讯服务器开放了海量的进程来连接客户端, 其中有很多连接都申请同一个资源, 以此模拟重负荷日常应用.

通过诸如此类的压力测试我们可以估算JVM的极限吞吐量(每秒的消息数量). JEP在22种不同的测试中都得到了出色的成绩, 新的机制如果能在Java 9中得到应用的话, 应用程序的性能将会大大提升.

关于JEP 143的更多内容

6. 代码分段缓存

Java 9的另一个性能提升来自于JIT(Just-in-time)编译器. 当某段代码被大量重复执行的时候, 虚拟机会把这段代码编译成机器码(native code)并储存在代码缓存里面, 进而通过访问缓存中不同分段的代码来提升编译器的效率.

和原来的单一缓存区域不同的是, 新的代码缓存根据代码自身的生命周期而分为三种:

- 永驻代码(JVM 内置 / 非方法代码)

- 短期代码(仅在某些条件下适用的配置性(profiled)代码)

- 长期代码(非配置性代码)

缓存分段会在各个方面提升程序的性能, 比如做垃圾回收扫描的时候可以直接跳过非方法代码(永驻代码), 从而提升效率.

更多关于JEP 197的内容

7. 智能Java编译, 第二阶段

智能Java编译工具sjavac的***阶段开始于JEP 139这个项目, 用于在多核处理器上提升JDK的编译速度. 现在这个项目已经进入第二阶段(JEP 199), 目的是改进sjavac并让其成为取代目前JDK编译工具javac的Java默认的通用编译工具.

其他值得期待的内容:

8. HTTP 2.0客户端

HTTP 2.0标准虽然还没正式发布, 但是已经进入了最终审查阶段, 预计可以在Java 9发布之前审查完毕. JEP 110将会重新定义并实现一个全新的Java HTTP客户端, 用来取代现在的HttpURLConnection, 同时也会实现HTTP 2.0和网络接口(原文websockets). 它现在还没被JEP正式认可但我们希望在Java 9中包含这一项目的内容.

官方的HTTP 2.0 RFC(Request for Comments, 官方技术讨论/会议记录等等的一系列文档记录)预订于2015年2月发布, 它是基于Google发布的SPDY(Speedy, 快速的)协议. 基于SPDY协议的网络相对于基于HTTP 1.1协议的网络有11.81%到47.7%之间的显著提速, 现在已经有浏览器实现了这个协议.

9. Kulla计划: Java的REPL实现

这个取名为Kulla的项目最近宣布将于2015年4月整合测试, 虽然已经不太有希望能赶上Java 9的发布, 但如果进度快的话或许刚好能赶上. 现在Java并没有来自官方的REPL(Read-Eval-Print-Loop)方式, 也就是说现在如果你想要跑几行Java代码做一个快速的测试, 你仍然需要把这几行代码封装在项目或者方法里面. 虽然在一些流行的IDE里面有Java REPL工具, 但它们并没有官方支持, 而Kulla项目或许就能成为Java官方发布的REPL解决方案. 

更多关于Kulla计划的内容

这些新功能出自何处?

JEP和JSR并不是无中生有, 下面就介绍一下Java发展的生态环境:

小组 - 对特定技术内容, 比如安全, 网络, Swing, HotSpot, 有共同兴趣的组织和个人

项目 - 编写代码, 文档以及其他工作, 至少由一个小组赞助和支持, 比如最近的Lambda计划, Jigsaw计划和Sumatra计划.

JDK改进提案(JEP) - 每当需要有新的尝试的时候, JEP可以在JCP(Java Community Process)之前或者同时提出非正式的规范(specification). 被正是认可的JEP正式写进JDK的发展路线图并分配版本号.

Java规范提案(JSR) - 新特性的规范出现在这一个阶段, 可以来自于小组 / 项目, JEP, JCP成员或者Java社区(community)成员的提案. 每个Java版本都由相应的JSR支持, Java 9暂时还没有.

英文原文:http://www.takipiblog.com/java-9-the-ultimate-feature-list/

译文出自:http://www.oschina.net/translate/java-9-the-ultimate-feature-list#repl

责任编辑:林师授 来源: 开源中国社区编译
相关推荐

2014-09-15 21:46:45

华为SDN软件定义网络

2014-12-25 10:45:09

微信平台windows

2010-04-16 08:51:24

Silverlight

2012-02-27 15:34:27

英特尔Cedar Trail凌动处理器

2010-01-08 11:15:07

Intel 32nm处

2020-05-12 10:15:36

5G运营商技术

2023-03-16 18:30:55

GPT-4ChatGPT

2009-01-20 13:57:02

网络硬盘Google云计算

2014-10-12 10:40:28

Java 9

2021-10-08 09:15:34

5G商用运营商

2009-11-25 08:52:07

Web应用IE应用

2022-11-21 10:11:37

GPT-4模型

2013-05-14 10:24:30

2022-04-26 14:33:21

鸿蒙操作系统

2023-12-21 09:14:27

AI科技

2023-04-10 07:10:29

WebGPU浏览器JavaScript

2014-10-14 10:43:48

IT技术周刊

2019-01-21 09:52:26

深度学习开源人工智能

2018-02-25 11:04:31

点赞
收藏

51CTO技术栈公众号