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可以容易应用到小型计算设备(好比网络设备)中,提升它的安全和性能,同时也能让开发者更容易构建和维护这些类库。
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());
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);
System.out.println(germanFormat.format(monetaryAmount)); // 1.202,12 USD
5. 改善锁争用机制
锁争用是限制许多Java多线程应用性能的瓶颈. 新的机制在改善Java对象监视器的性能方面已经获得了多种基准(benchmark)的验证, 其中包括Volano. 测试中通信服务器开放了海量的进程来链接客户端, 其中有不少链接都申请同一个资源, 以此模拟重负荷平常应用.
经过诸如此类的压力测试咱们能够估算JVM的极限吞吐量(每秒的消息数量). JEP在22种不一样的测试中都获得了出色的成绩, 新的机制若是能在Java 9中获得应用的话, 应用程序的性能将会大大提高.
6. 代码分段缓存
Java 9的另外一个性能提高来自于JIT(Just-in-time)编译器. 当某段代码被大量重复执行的时候, 虚拟机会把这段代码编译成机器码(native code)并储存在代码缓存里面, 进而经过访问缓存中不一样分段的代码来提高编译器的效率.
和原来的单一缓存区域不一样的是, 新的代码缓存根据代码自身的生命周期而分为三种:
- 永驻代码(JVM 内置 / 非方法代码)
- 短时间代码(仅在某些条件下适用的配置性(profiled)代码)
- 长期代码(非配置性代码)
缓存分段会在各个方面提高程序的性能, 好比作垃圾回收扫描的时候能够直接跳过非方法代码(永驻代码), 从而提高效率.
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解决方案.