本文会根据针对即将发布的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的新特性做持续更新。敬请关注!
[已接受]Jigsaw 项目–:源代码模块化
[已接受]简化进程API
[已接受]轻量化JSON API
[已接受]货币API
[已接受]改善竞争锁
[已接受]分割代码缓存区
[已接受]Smart Java Compilation项目 –:第二阶段
[期望]HTTP 客户端
[期望]在Java中包含REPL
这些新特性从哪里来的?
被接受的特性 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能够容易应用到小型计算设备(比如网络设备)中,提高它的安全和性能,同时也能让开发者更容易构建和维护这些类库。
更多JEP 201内容
2. 简化进程API
截止到目前,Java控制与管理系统进程的能力是有限的。举个例子,现在为了简便获取你程序的进程PID,你要么调用本地程序要么要自己使用一些变通方案。更多的是,每个(系统)平台需要有一个不同实现来确保你能获得正确的结果。
期望代码能获取Linux PIDS,现在是如下方式:
public static void main(String[] args) throws Exception
{
Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" });
if (proc.waitFor() == 0)
{
InputStream in = proc.getInputStream();
int available = in.available();
byte[] outputBytes = new byte[available];
in.read(outputBytes);
String pid = new String(outputBytes);
System.out.println("Your pid is " + pid);
}
}
在Java 9中,可以变换成如下方式(支持所有的操作系统):
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,里面已经给出了使用说明和示例, 以下是几个重要的例子:
//新的类型: Money & FastMoney
Money amt1 = Money.of(10.1234556123456789, "USD"); // Money is a BigDecimal
FastMoney amt2 = FastMoney.of(123456789, "USD"); // FastMoney is up to 5 decimal places
Money total = amt1.add(amt2);
// 钱表达成各国货币的方法:
MonetaryAmountFormat germanFormat = MonetaryFormats.getAmountFormat(
Locale.GERMANY);