预计2016年9月发布的Java 9,带来了哪些新特性呢?让我们先睹为快.

1、Java + REPL = jshell

 Java 9将带来新的命令行工具,叫做jshell,它将添加新的支持以及流行的Java方式的REPL(Read-Eval-Print-Loop)。这将意味着,如果我们想要执行一些java代码,不必非要将其包装在一个项目中或方法中,直接可以在命令行执行:

-> 2 + 2
| Expression value is:4
|    assigned to temporary variable $1 of type int

现在,jshell已经在早期预览版本中可用了。

2、微基准测试

Java微基准测试工具(JMH)是一个用来构建、运行和分析nano/micro/milli/macro基准的Java工具。JMH现在已经成为了Java 9的同义词。

3、G1成为新的默认垃圾收集器

我们经常听见的一个错觉是Java只有一个垃圾收集器,而实际上它有4个。伴随着Java 9,自Java 7引入的G1现在在提案中成为成为争论的焦点:使用它代替默认的垃圾收集器(The parallel/Throughput collector)。

一般来说,G1被设计用来更好地支持大于4GB的堆内存,因此都知道会引起更少的GC问题。但是一旦产生GC问题,则可能会暂停更长时间。

4、HTTP 2.0是未来

官方的HTTP 2.0 RFC在几个月这前刚刚被批准,构建在Google的SPDY算法之上。SPDY已经显示了理快的速度提升,相较于HTTP1.1 提升在11.81%6和47.7%之间,而且其实现已经普通存在于现代的浏览器中。

Java 9全面支持HTTP 2.0,带来了新的HTTP客户端,将替代HttpURLConnection,并且还实现了HTTP 2.o和web socket。

5、Process API获得了巨大的推动

到目前为止,Java对于控制和管理操作系统只有有限的能力。例如,在早期的版本中,仅是简单地为了获得进程的PID,我们就必须访问本地代码或使用一些技术手段。而且对于每个平台都要有不同的实现。

例如,如果想要获得Linux PID,则目前我们的代码只能像下面这样:

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("您的pid是" + pid);
 }
}

而在Java 9中,可以转换为下面这一行代码即可:

System.out.println("您的pid是" + Process.getCurrentPid());


在Java 9中,有几个大家都期望的特性,看来是不会出现了:

1、一个标准的轻量级JSON API:要推迟到JDK 10或更后的版本-认为它不是最重要的特性。

2、Money和Currency API:大家期待的Money和Currency API也缺乏Oracle的支持。