今天咱们已经对Java 9中所期待的特性有了一个很清晰的图景。若是Java 8能够被描述为主要是lambdas表达式、streams和API变化的话,那么Java 9就是关于Jigsaw、额外的实用工具和内部的变化。在这篇文章中,收集了一些咱们认为是Java 9中最期待的特性——除了一般的猜想以外,Jigsaw项目,承担了打破JRE并对Java核心组件模块化的使命。html
这里有一些特性是Java 9中绝对必要了解的,其中的一些已经在早期的发布版本中为你捣鼓作好了准备。web
1.Java + REPL = jshell算法
是的。以前咱们怀疑Kulla项目是否会在Java 9中准时发布,但如今已获得了官方确认。下一版发布的Java将会有称为jshell的新命令行工具,它会添加本地支持和以Java方式对REPL(交互式解释器)进行推广。意思是说,若是你想只运行几行Java代码,你没必要把它包装进一个单独的工程或者方法。shell
噢,你能够忘掉那些分号了:浏览器
1websocket
2socket
3-> 2 + 2模块化
| 表达式的值是4工具
| 将临时变量$1的类型设为int性能
还有一些像REPL加载项同样的替代品会增长到流行的IDE和解决方案中,就像Java REPL网页控制台。但目前为止,尚未官方的或者合适的方式来这么作。jshell在早期的版本中已经能够用了,等着你给它来个测试运行。
二、微基准测试要来了
由Alexey Shipilev开发的Java微基准测试套件(Java Microbenchmarking Harness)正在其进化的下一阶段,并加入Java做为官方基准解决方案。咱们真的很喜欢在Takipi作基准,因此一套标准化的执行方式是咱们期待的。
JHM是一组用来编译、运行和分析nano/micro/milli/macro基准的套件。当涉及到精确基准评估,对结果产生很大影响的能力将备受关注,好比预热时间和优化。当你以微秒或纳秒计时的状况下尤为如此。因此,若是你想要更加精确的结果来帮助跟踪基准以作出正确的决定,JMH是你的最佳选择——而且如今它已经成为Java 9的同义词了。
三、G1会成为新的默认垃圾收集器吗?
咱们常常据说的一个误解是:Java只有一个垃圾收集器,而事实上它有4个。Java 9中,仍有一个运行提议,关于替换由Java 7引入的G1默认垃圾收集器(并行/吞吐量收集)的讨论。不一样收集器之间差异精简概述,能够查看这篇里的文章。
一般来讲,G1被设计来更好地支持大于4GB的堆,而且不会形成频繁的GC暂停,但当暂停发生时,每每会处理更长时间。最近咱们和Outbrain的性能专家Haim Yadid讨论了关于GC的方方面面,来帮助你了解更多各收集器之间不一样的权衡。一样,若是你想要深刻了解相关讨论,那么hotspot-dev和jdk9-dev的邮件组是个开始学习不错的地方。
四、将来是HTTP 2.0
官方的HTTP 2.0标准是几个月以前被批准的,基于Google的SPDY算法构建。SPDY已经展现了相对HTTP 1.1巨大的速度提高,范围在11.81%到47.7%之间,而且它已经存在于大多数现代的浏览器中了。Java 9将全面支持HTTP 2.0,而且为Java配备一个全新的HTTP客户端来替代HttpURLConnection,而且同时还实现HTTP 2.0和websockets。
五、进程API获得了巨大的推进
到目前为止,经过Java来控制和管理操做系统进程能力有限。例如在早期版本的Java中,为了作一些简单的事情,像获得进程PID,要么访问本机代码,要么用某种神奇的临时解决方法。此外,还可能须要一个对于每一个平台提供不一样实现来保证你获得正确的结果。
在Java 9中,除了获取Linux PID的代码,如今都像这样来获取:
1
2
3
4
5
6
7
8
9
10
11publicstaticvoidmain(String[] args)throwsException {
Process proc = Runtime.getRuntime().exec(newString[]{"/bin/sh","-c","echo $PPID"});
if(proc.waitFor() ==0) {
InputStream in = proc.getInputStream();
intavailable = in.available();
byte[] outputBytes =newbyte[available];
in.read(outputBytes);
String pid =newString(outputBytes);
System.out.println("Your pid is "+ pid);
}
}
转向像这样的代码(一样也支持全部的操做系统):
1System.out.println("Your pid is"+ Process.getCurrentPid());
这一更新将扩展Java与操做系统交互的能力:全新的直接操做PID、进程名和状态的方法,操做JVM线程和进程等等能力。
http://mt.sohu.com/20160906/n467734021.shtml
http://mt.sohu.com/20160906/n467725557.shtml
http://mt.sohu.com/20160906/n467729919.shtml