有望在Java 9中发布的最令人兴奋的功能是什么?
不要对Java 9的相对沉默近来分散注意力。JDK提交者正在努力准备下一个版本,该版本预计将在2015年12月完成,而功能将在几个月后完成 。此后,它将通过严格的测试和错误修复了将其计划于2016年9月发布的一般可用性。
今天,我们对Java 9的功能有了一个清晰的了解。如果可以将Java 8描述为lambda,流和API更改的主要版本,那么Java 9完全是关于Jigsaw ,额外的实用程序和更改的内容。 在这篇文章中,我们收集了一些我们认为是针对Java 9的最令人兴奋的功能–除了通常的怀疑之外,Jigsaw项目承担了分解JRE并将Java核心组件引入模块化的使命。 。
这里有一些Java 9必须绝对要了解的功能,其中一些已经准备好供您在早期发行版中使用 。
1. Java + REPL = jshell
是。 以前,我们对Kulla项目能否及时发布Java 9表示怀疑,但现在它是正式的。 Java的下一发行版将具有一个名为jshell的新命令行工具,该工具将添加本机支持并普及Java模式以实现REPL(Read-Eval-Print-Loop)。 举例来说,这意味着如果您希望自己运行几行Java,则无需将其全部包装在单独的项目或方法中。 哦,分号–您可以忘记那些:
-> 2 + 2
| Expression value is: 4
| assigned to temporary variable $1 of type int
有一些替代方法,例如流行的IDE的REPL插件和Java REPL Web控制台之类的解决方案,但是到目前为止,还没有任何官方正确的方法。 jshell已在早期发行版中提供,并等待您对其进行测试。
2.微基准测试即将到来
Alexey Shipilev的Java Microbenchmarking Harness( JMH )正在迈向其发展的下一步,并加入Java作为官方基准测试解决方案 。 我们真的很喜欢在塔基皮(Takipi) 进行 基准测试 ,因此我们希望能有一种标准化的基准测试方法。
JMH是用于构建,运行和分析nano / micro / milli / macro基准测试的Java工具。 当涉及到准确的基准测试时,诸如预热时间和优化之类的因素可能会对结果产生重大影响。 尤其是当您下降到微秒和纳秒时。 因此,如果您想获得最准确的结果来帮助您按照基准测试做出正确的决定,那么今天的JMH是您的最佳选择–现在,它已成为Java 9的代名词。
3. G1将成为新的默认垃圾收集器吗?
我们经常听到的一个常见误解是Java只有一个垃圾收集器,而实际上只有4个 。 对于Java 9,有一个正在运行的建议仍在争论中,以Java 7中引入的G1替换默认的垃圾收集器(并行/吞吐量收集器)。有关不同收集器之间差异的概述,您可以查看这个职位在这里 。
通常,G1旨在更好地支持大于4GB的堆,并且已知会导致较少的GC暂停,但是当出现暂停时,它往往会更长。 最近,我们已经与Outbrain的性能负责人Haim Yadid讨论了GC的所有方面,以帮助您进一步了解收集器之间的不同权衡 。 另外,如果您想深入了解这场辩论,那么hotspot-dev和jdk9-dev邮件列表是一个不错的起点。
4. HTTP 2.0是未来
官方的HTTP 2.0 RFC是在Google的SPDY算法的基础上于几个月前获得批准的。 SPDY在HTTP 1.1上已显示出极大的速度改进,范围在11.81%到47.7%之间,并且其实现已存在于大多数现代浏览器中。
Java 9将完全支持 HTTP 2.0,并具有一个新的Java HTTP客户端,它将取代HttpURLConnection,并实现HTTP 2.0和websocket。
5.流程API有了巨大的提升
到目前为止,使用Java控制和管理操作系统进程的能力有限。 例如,为了执行与在Java早期版本中获取过程PID一样简单的操作,您将需要访问本机代码或使用某种神奇的解决方法。 此外,每个平台都需要不同的实现方式,以确保获得正确的结果。
在Java 9中,期望用于检索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("Your pid is " + pid);}
}
要变成这样(也支持所有操作系统):
System.out.println(“您的pid是” + Process.getCurrentPid());
该更新将扩展Java与操作系统交互的能力:处理PID,进程名称和状态的新直接方法,以及枚举JVM和进程等的能力。
您在Java 9中看不到什么?
我们假定有两个有趣的功能将成为即将发布的Java版本的一部分-但现在我们知道这次将跳过这些功能。
1.标准化的轻量级JSON API
在我们与350位开发人员进行的一项调查中,JSON API像Jigsaw一样被大肆宣传,但由于资金问题,它似乎没有被削减。 Java平台的首席架构师Mark Reinhold在JDK 9邮件列表中:
“该JEP将是对该平台的有用补充,但是,从总体上看,它不如Oracle为JDK 9资助或考虑为其资助的其他功能那么重要。我们可能会重新考虑针对JDK 10或JDK 9的JEP。更高版本。 ”
2.货币和货币API
在其他消息中,看起来还像预期的Money and Currency API缺乏Oracle支持。 这是我们从API规范负责人Anatole Tresch得到的答案:
@tkfxin当前不是。 Oracle没有这样做。 相反,我们将改善对ee的支持,而spring也会对其提供支持:)
— Anatole Tresch(@atsticks) ,2015年6月16日
翻译自: https://www.javacodegeeks.com/2015/06/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont.html