预计发布的Java 9中,最令人兴奋的特性是什么?

有关Java9的消息最近显得有些沉寂,不要被它迷惑了。JDK开发者正在努力朝着下一个版本迈进,计划2015年12月前完成所有功能开发。之后,它会经历严格测试和bug修复以准备它的全面上市,按计划会在2016年9月发布。

今天我们已经对Java 9中所期待的特性有了一个很清晰的图景。如果Java 8可以被描述为主要是lambdas表达式、streams和API变化的话,那么Java 9就是关于Jigsaw、额外的实用工具和内部的变化。在这篇文章中,收集了一些我们认为是Java 9中最期待的特性——除了通常的猜测之外,Jigsaw项目,承担了打破JRE并对Java核心组件模块化的使命。

这里有一些特性是Java 9中绝对必要了解的,其中的一些已经在早期的发布版本中为你捣鼓做好了准备。

1.Java + REPL = jshell

是的。之前我们怀疑Kulla项目是否会在Java 9中准时发布,但现在已得到了官方确认。下一版发布的Java将会有称为jshell的新命令行工具,它会添加本地支持和以Java方式对REPL(交互式解释器)进行推广。意思是说,如果你想只运行几行Java代码,你不必把它包装进一个单独的工程或者方法。

噢,你可以忘掉那些分号了:

-> 2 + 2
| 表达式的值是4
| 将临时变量$1的类型设为int

还有一些像REPL加载项一样的替代品会增加到流行的IDE和解决方案中,就像Java REPL网页控制台。但目前为止,还没有官方的或者合适的方式来这么做。jshell在早期的版本中已经可以用了,等着你给它来个测试运行。

2、微基准测试要来了

由Alexey Shipilev开发的Java微基准测试套件(Java Microbenchmarking Harness)正在其进化的下一阶段,并加入Java作为官方基准解决方案。我们真的很喜欢在Takipi做基准,所以一套标准化的执行方式是我们期待的。

JHM是一组用来编译、运行和分析nano/micro/milli/macro基准的套件。当涉及到精确基准评估,对 结果产生很大影响的能力将备受关注,比如预热时间和优化。当你以微秒或纳秒计时的情况下尤其如此。所以,如果你想要更加精确的结果来帮助跟踪基准以做出正 确的决定,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标准是几个月之前被批准的,基于Google的SPDY算法构建。SPDY已经展示了相对HTTP 1.1巨大的速度提升,范围在11.81%到47.7%之间,并且它已经存在于大多数现代的浏览器中了。Java 9将全面支持HTTP 2.0,并且为Java配备一个全新的HTTP客户端来替代HttpURLConnection,并且同时还实现HTTP 2.0和websockets。

5、进程API得到了巨大的推动

到目前为止,通过Java来控制和管理操作系统进程能力有限。例如在早期版本的Java中,为了做一些简单的事情,像得到进程PID,要么访问本机代码,要么用某种神奇的临时解决方法。此外,还可能需要一个对于每个平台提供不同实现来保证你得到正确的结果。

在Java 9中,除了获取Linux PID的代码,现在都像这样来获取:

  1. public static void main(String[] args) throws Exception {
  2. Process proc = Runtime.getRuntime().exec(new String[]{ "/bin/sh", "-c", "echo $PPID" });
  3. if (proc.waitFor() == 0) {
  4. InputStream in = proc.getInputStream();
  5. int available = in.available();
  6. byte[] outputBytes = new byte[available];
  7. in.read(outputBytes);
  8. String pid = new String(outputBytes);
  9. System.out.println("Your pid is " + pid);
  10. }
  11. }

转向像这样的代码(同样也支持所有的操作系统):

System.out.println("Your pid is" + Process.getCurrentPid());

这一更新将扩展Java与操作系统交互的能力:全新的直接操作PID、进程名和状态的方法,操作JVM线程和进程等等能力。

你不会在Java 9中见到什么?

我们以为两个有趣的特性会作为即将到来的Java发布版本中的一部分——但现在我们知道它们将不会出现在这次发布的版本。

1、一个标准的轻量级JSON API

在我们进行的一项对350名开发人员的调查中,JSON API就像Jigsaw一样被大肆宣传,但看起来它好像没在发布版本中,原因可能是资金问题。Mark Reinhold,Java平台的首席架构师,在JDK 9的邮件列表中写到:

“这个JEP对于平台来说是个有益的补充,但长远来看,考虑到资金的因素以及Oracle资助的其它特性,它并不如其它特性一样重要。我们考虑可能在JDK 10或者之后的版本再发布这个JEP。”

2、金钱和货币API

有一条新闻,似乎看起来金钱和货币API也缺少Oracle的支持。这是我们从Anatole Tresch那里得到的答案,这个API的产品推广师:

@tkfxin 目前不会。从Oracle那里没得到支持。取而代之的,我们将提高Java EE支持并且spring也将支持它

– Anatole Tresch (@atsticks) 2015年6月16日

我们遗漏了什么吗?请在下面的评论区告诉我们吧。没有空闲时间?来看看何时以及为何在产品中代码会出现失败中断。

来源:51CTO

即将改变软件开发的5个Java9新特性相关推荐

  1. Github Actions:再次改变软件开发

    本文转自 FEPulse 公众号(微信搜索 FEPulse,精选国内外最新前端资讯,为你把握前端脉搏). Github Actions 是 GitHub Universe 大会上发布的,被 Githu ...

  2. 本文写给广大正在做软件开发的、曾经做过软件开发的以及即将做软件开发的女同胞们。同时也希望男同胞们能够给女同胞多一些理解和包容,多一些关心和帮助,让女同胞能在软件开发的路上走的更远一点,走的更好一

    本文写给广大正在做软件开发的.曾经做过软件开发的以及即将做软件开发的女同胞们.同时也希望男同胞们能够给女同胞多一些理解和包容,多一些关心和帮助,让女同胞能在软件开发的路上走的更远一点,走的更好一些.  ...

  3. Java9 新特性 详解

    目录 Java9 新特性 详解 1.Java9新特性之---目录结构 2.Java9新特性之---JShell工具 3.Java9新特性之---模块化 4.Java9新特性之---多版本兼容Jar包 ...

  4. JAVA9 新特性 完整使用

    JAVA9 新特性 完整使用 一.介绍(java9新特性) 1.Oracle JDK9 Documentation(java9新特性) 2.官方提供新特性列表(java9新特性) 3.JDK和JRE ...

  5. 【小家java】java9新特性(简述十大新特性) 褒贬不一

    相关阅读 [小家java]java5新特性(简述十大新特性) 重要一跃 [小家java]java6新特性(简述十大新特性) 鸡肋升级 [小家java]java7新特性(简述八大新特性) 不温不火 [小 ...

  6. iOS 9应用开发教程之iOS 9新特性

    iOS 9应用开发教程之iOS 9新特性 iOS 9开发概述 iOS 9是目前苹果公司用于苹果手机和苹果平板电脑的最新的操作系统.该操作系统于2015年6月8号(美国时间)被发布.本章将主要讲解iOS ...

  7. 软件测试:保障软件质量的关键性关口——记中国工商银行软件开发中心北京研发_manok_新浪博客...

    因为近一年来做金融行业的软件测试工作,所以转载了这篇工商银行开展测试工作的相关资料. 题目:软件测试:保障软件质量的关键性关口--记中国工商银行软件开发中心北京研发部的测试工作 作者:王冬 加入日期: ...

  8. 即将到来的 Android N 将具备这些新特性

    去年的I/O大会上Google表示,今后每一年的I/O大会上都会推出对Android重大更新后的新版本. 今年I/O大会,我们有理由相信,Android 7.0,也就是Android N,会与我们见面 ...

  9. java9新特性--jShell--命令语法改进:try语和接口的私有方法--String存储结构变更--集合工厂方法--模块化系统--InputStream 加强--增强的 Stream API

    目录 Java 9 的新特性 JDK 和 JRE 目录结构的改变 模块化系统: Jigsaw -> Modularity 实现目标 模块 结构 jShell命令 产生背景 设计理念 实现目标 j ...

最新文章

  1. Magento如何使用和设置CookieSession
  2. 柜位预測(一)——显示柜位曲线图
  3. 【原】Linux设备网络硬件管理
  4. python 三引号_Python 简明教程 --- 4,Python 变量与基本数据类型
  5. 【图像加密】基于matlab GUI+Logistic+Tent+Kent+Henon图像加密与解密【含Matlab源码 1745期】
  6. 微信点击右上角 在浏览器中打开代码
  7. Proteus安装图文教程
  8. 保密基本知识试题(2017年版)(共281题)
  9. PayPal支付功能实现
  10. VSLAM基础(七)————光束平差法Bundle Adjustment
  11. 执行git reset --hard后文件的恢复
  12. 年轻人租房大数据报告(人群画像).pdf
  13. ssh连接Linux机器一直让输入密码
  14. 2021年5月ccaa审核员考试管理体系认证基础真题
  15. python的return详解。
  16. 点计算机图标就自动关机了,为什么点计算机的关机图标不能自动关机
  17. 外行对程序员误会有多深!扎心了!
  18. 洞泾智能机器人产业基地_在全球人工智能产业版图中努力树起“G60旗帜”
  19. 机器学习图像分割——模型评价总结(含完整代码)
  20. 分享一个阿里云开源的流程图-g6

热门文章

  1. JS-概述-基本语法-变量-数据类型
  2. 67. 二进制求和(转换法)
  3. Linux驱动(2)--ARM的架构发展以及如何评价处理器
  4. 7-323 逆波兰表达式 (10 分)
  5. oracle以32位运行,Oracle在 32位系统上运行突破sga1.7g的方法
  6. jenkins自动部署windwos服务器
  7. SET/JFace ProgressIndicator的使用以及来回滚动进度条实际使用示例
  8. \pset 、\x命令
  9. 在DLL Project中定义配置文件
  10. 《BI那点儿事》数据挖掘各类算法——准确性验证