点击上方“CSDN”,选择“置顶公众号”

关键时刻,第一时间送达!

千呼万唤始出来,在经历了整整一年的跳票之后,Java 9 终于在 9 月 21 日拨开云雾,露出真正的面目。对众多 Java 程序员来说,这一天无疑是一个重大的日子,首先 Java 开发者们再也不用羡慕别的自带 REPL 的语言了,不用为了试个 Java 功能而开个 Groovy shell;其次最主要的莫过于 Jigsaw 项目下颠覆性的 Java 模块化了,有了它,自己定制/裁剪 JDK 变得更直接。

其中,整个 Java 的核心内容非 JDK 莫属,其包括了 Java 运行环境(Java Runtime Envirnment)、Java 工具和 Java 基础的类库。而无论什么样的 Java 应用服务器实质都是内置了某个版本的 JDK,因此掌握 JDK 是学好 Java 的第一步。

JDK 9 主要特性

对于最新发布的 Java 9,JDK 9 有哪些主要的特性呢?

1、Jigsaw 项目:颠覆性的模块化 JDK

Jigsaw 项目是为了模块化 Java 代码,并将 JRE 分成相互协作的组件。这个 JEP 是迈向 Jigsaw 四步中的第一步,它只是模块化 JDK 源代码,不会改变 JRE 和 JDK 的真实结构,从而使得编译系统能够模块编译并在构建时检查模块边界。

这个项目原计划随 Java 8 发布,但因为推迟,所以被放到了 Java 9 中。Jigsaw 项目一旦完成,将允许开发者根据项目的需要自定义组件,从而减少 rt.jar 的大小;还可以做到使 Java 能够更加容易的应用到小型计算设备(如网络设备)中,同时也能够使得开发者更加容易地构建和维护这些类库。

2、简化了的进程 API

目前,Java 控制与管理系统进程的能力是有限的,为了获得操作系统的一些信息需要调用本地程序或者其他变通方案。然而,在 Java 9 中将会新增一些新的、直接明了的方法来处理进程 ID、名字和状态以及枚举多个 JVM 和进程等,从而扩展 Java 与操作系统的交互能力。

3、 轻量级的 JSON API

尽管目前有多种处理 JSON 的 Java 工具(如 Google 的 Gson、阿里巴巴的 FastJson、IBM 的 Json4J 等),但 JSON API 是 Java 语言的一部分,轻量并且运用了 Java 8 的新特性。JSON API将放在 java.util 包里一起发布,这样,开发者就可以直接使用 JDK 而无需再引入第三方 JSON 工具包了。

4、 钱和货币的相关 API

Java 9 引入了新的货币 API, 用来表示货币, 并支持币种之间的转换和各种复杂运算。

5、 改善锁争用机制

锁争用限制了许多 Java 多线程应用性能,新的锁争用机制改善了 Java 对象监视器的性能,并得到了多种基准测试的验证(如 Volano),这类测试可以估算 JVM 的极限吞吐量。实际中, 新的锁争用机制在 22 种不同的基准测试中都得到了出色的成绩。如果新的机制能在 Java 9 中得到应用的话, 应用程序的性能将会大大提升。

6、代码分段缓存

Java 9 的另一个性能提升来自于JIT(Just-in-time)编译器。当某段代码被大量重复执行的时候, 虚拟机会把这段代码编译成机器码(native code)并储存在代码缓存里面, 继而通过访问缓存中不同分段的代码来提升编译器的效率。代码分段缓存机制将会提升许多方面的性能,如当 JVM 进行垃圾回收扫描的时候,就可以直接跳过永驻代码,从而提升效率。

7、智能 Java 编译工具

智能 Java 编译工具(sjavac)的第一阶段始于 JEP139 这个项目, 用于在多核处理器情况下提升 JDK 的编译速度。如今,这个项目已经进入第二阶段即 JEP199, 其目的是改进 Java 编译工具,并取代目前 JDK 编译工具 javac,继而成为 Java 环境默认的通用的智能编译工具。

  • JDK 9 下载地址:

    http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html

将应用程序迁移到 JDK 9:Yes or No?

了解完 JDK 9 的所有特性,很多开发者都在讨论是否要将项目迁移到 JDK 9。

接下来,本文根据以“你迁移到 JDK 9 的计划是什么?”为主题开展了一项民意调查,旨在给众多开发者了解将应用程序移植到 JDK 9 过程中所处的阶段。

调查一共有两次,分别面向 EMEA(欧洲、中东、非洲三地区的合称) 和美洲的开发者。

对于“是有有意愿将项目迁移到 JDK 9 ?”主题的调查包含了以下的选择:

  • 已在生产环境中使用 JDK 9

  • 正在迁移到 JDK 9

  • 正在观望中

  • 等待下一个长期支持版的发布

  • 还在使用 JDK 6

具体的调查数据如下:

来自 EMEA (欧洲、中东、非洲三地区的合称)开发者的调查结果:

来自美洲开发者的调查结果:

综合结果:

使用 JDK 9 的用户为零

根据以上的调查结果,可以看到,“正在观望中”的开发者占了大多数,而使用旧版本的朋友仍有不少,但意外的是,使用 JDK 9 的用户居然一个都没有。虽然这次调查的样本量可能不够大,但我们相信这确实是比较贴近现实的。

为何期盼已久的 JDK 惨遭嫌弃?

JDK 9 为何如此惨淡?下面我们将探索 JDK 9 很少在生产环境中被采用的根本原因:

  • 应用程序从 JDK 8 或更早版本迁移至 JDK 9 出现的不兼容变更情况的数量。尽管已经从标准 API 中移除的六种方法不会影响很多人,但是像停止 JVM 启动的命令行选项的数量将是一个障碍。

  • 内部 JDK API 封装的影响。同样,直接受此影响的开发者数量也不会很大,但间接受到影响的开发者数量则很多。因为大多数开发者在开发应用程序时使用了第三方库和框架,有很多这样的库和框架使用封装的 API。虽然大部分已经过测试并提供专门针对 JDK 9 的版本,但仍然有很多还没这样做。对于没有得到积极维护的库或框架来说,这无疑是一个会阻碍迁移至 JDK 9 的问题。

  • 受支持的寿命周期。甲骨文最近宣布将加快 JDK 的发布频率,改为每六个月发布一次。按照改进的发布计划,JDK 9 不是长期支持版本。在这个新方案下,JDK 9 将是以 JDK 8 为基础的第一个“功能”版本。而且由于公共的更新,开发者在决定要部署的 Java 版本时,需要记住一些东西。长期支持版本的更新将至少提供三年,而 JDK 8 的受支持周期更像是四年半。这些版本适用于喜欢稳定的企业,使其能够在单个版本上运行大型的应用程序。

对此,有不少网友也表示:

Glavo:

个人感觉挺失望的。

Java 9 库上的改动很小,API 上的变动更小,而语法新特性貌似一样都没有,所以对我来说,Java 9 没有太大的吸引力。

模块化是这个版本的 Java 里最大的改动,不过我感觉造成的破坏性还是有点大。之前非正式版的 openjdk9 上我连 gradle 都跑不起来。就算用上了正式版,我还是看到一群人在群里抱怨某某应用跑不起来,各个库和框架的移植也要等上好久。

新的工具 jaotc 和 jshell 我也试了一下。jaotc 目前还算不上真正可用。而且就算真正可用了,个人感觉在短时间内还是难以比过一些目前已经存在的一些 aot 编译器。

jshell 也算是 Java 的一个进步,不过功能还是挺弱的,用起来浓浓的 jline 风,编辑功能基本上也都是 jline 自己提供的,而且貌似也没有彩色显示?比起 Kotlin 没有补全的命令行的 repl 算是强一点,但是和 Scala repl 比起来都还是有一定差距的。

下面,只希望 Java 10 能做的更好吧!

许怀远:

JDK 9 语法几乎没有增强,核心库也只有少量改进,JVM 提升也不大,但它却是个转折点。

大刀阔斧砍掉 32 位版本,想用 32 位的,要么用 JDK 6/7/8,要么出门左转 OpenJDK。

砍掉了 VisualVM 和 jhat 等 JVM 诊断工具,下一个版本会不会砍掉 JFR?

Java 8 的项目,很大可能默认启动不了,甚至不加参数编译不了,模块化带来的阵痛。

每半年发布一个新版本,比之前三年一个版本快的多,长期支持版本尚未发布。将 Java EE 和 Java SE Embedded 甩给了社区,Oracle 要减少投入?

综合以上几点,Java 6 是 Win XP,Java 8 是 Win 7,Java 9 算是砍掉 32 位的 Win 8,注定是个临时过度版本,想迁移到 9 的团队,多半会等下一个长期支持版。

总结

大多数开发者表示,他们将继续在生产环境中使用 JDK 8,至少直到下一个 LTS 版发布。而根据甲骨文展示的计划,在 LTS 版本之间进行转换对开发者来说颇具挑战性。

那么,你对 JDK 9 怎么看呢?现在已经在生产环境中使用了吗,还是继续观望中?

————— END —————

雷军:全面屏新零售微信都是我先提的,为什么你们只记住了苹果马云张小龙?

刘强东暗讽马云王健林:为什么还有几千万人极度贫困?这是耻辱!

一文读懂马云、马化腾、李彦宏、库克等互联网大佬们都在乌镇干了啥


JDK 9 发布仅数月,为何在生产环境中却频遭嫌弃?相关推荐

  1. 苹果推送iOS13.1.3更新:iOS13发布仅一个月疯狂补Bug

    10月16日,苹果推送了iOS 13.1 .3系统升级,主要包括针对iPad和iPhone的错误修复和改进,而这也是iOS 13发布仅一个月以来推送的第四个升级补丁. 具体改进如下: 解决了使用Gam ...

  2. [第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

    在我上篇文章如何在ASP.Net Core的生产环境中保护swagger ui中,我们讨论了如何使用基本身份验证来保护 swagger ui. 使用 OAuth 2.0 和 OpenIdConnect ...

  3. 重磅福利!《Apache Flink 十大技术难点实战》发布,帮你从容应对生产环境中的技术难题...

    精选30+云产品,助力企业轻松上云!>>> 简介: 总结生产环境十大常见难点,10篇技术实战文章帮你完成故障识别.问题定位.性能优化等全链路过程,实现从基础概念的准确理解到上手实操的 ...

  4. vgpu服务器显卡性能,如何在vGPU环境中优化GPU性能

    大家好, 我收到了关于如何在vGPU环境中优化GPU性能的两个请求,并认为这将是我们的GRID论坛上的一个很好的线程,每个人都可以在他们如何微调vGPU环境方面添加他们的经验. 让我从一些公共资源开始 ...

  5. 如何在Linux环境中使用USB存储器(转)

    如何在Linux环境中使用USB存储器(转) 如何在Linux环境中使用USB接口的存储设备?这是各大电脑论坛上出现得比较多的一个问题,同此可见这也是摆在许多电脑玩家面前的一道难题.本文就为您提供一套 ...

  6. (23/24) webpack实战技巧:如何在webpack环境中使用Json

    (23/24) webpack实战技巧:如何在webpack环境中使用Json 在webpack1或者webpack2版本中,若想在webpack环境中加载Json文件,则需要加载一个json-loa ...

  7. 如何在DOCKER环境中使用DB2

    如何在DOCKER环境中使用Db2 前言 此问的目的是帮助用户能够在docker的环境中学习Db2,前提条件的你的服务器可以访问互联网,否则无法下载Db2镜像.Docker环境中学习Db2的优势是省去 ...

  8. ANSYS mechanical如何在Workbench环境中使用高性能计算

    ANSYS mechanical属于隐式结构有限元分析求解器,一般完成一个有限元分析过程需要前处理.求解和后处理三个步骤.前处理一般在图形工作站上完成,有限元求解可在工作站.集群及SMP 服务器上进行 ...

  9. 【DevOps】灰度发布与蓝绿部署:生产环境中推出新版本的部署策略

    灰度发布和蓝绿部署是两种常见的部署策略,用于在生产环境中推出新版本,减少影响和风险.今天呢,田辛老师将详细介绍灰度发布和蓝绿部署的原理.优缺点以及举例说明实际操作的步骤. 1 灰度发布 1.1 原理 ...

最新文章

  1. cookie 和 session 机制
  2. 自学python如何找工作-新手小白如何自学Python出去找工作?我用这五本书告诉你...
  3. 三个步骤分析网站优化程度
  4. java编程赋值运算符_(24)赋值运算符
  5. 【Qt】QModbusReply类
  6. 操作系统课设——设计模拟一个SPOOLING假脱机输出程序
  7. 计算机系统结构实验报告Linux,计算机操作系统体系结构实验报告.doc
  8. 在arm上运行x86动态库_苹果官宣:Arm取代英特尔
  9. SharePoint【学习笔记】-- SPWeb.EnsureUser()注意AllowUnsafeUpdates=true
  10. NSGA2 算法Matlab实现
  11. c#语言程序翻译软件,C#使用百度翻译API
  12. 大麦无线路由器改装打印服务器,大麦domywifi DW33D路由器固件openwrt重分区版
  13. 终于得空,写两句了......
  14. 微信拼车小程序无服务器,滴滴顺风车下架 拼车微信小程序笑了
  15. 29(将数字字符串转换成数字)
  16. oracle灾备冗余方案,Oracle灾备方案
  17. 亚信安全中标北方网“津云”项目 护航“云+网”全媒体平台
  18. 【KMP】OKR-Periods of Words
  19. FastAdmin 多表联查 踩坑
  20. 如何使用Createjs来编写HTML5游戏(八) 通过继承扩展EaselJS中的基础元素

热门文章

  1. Golang并发模式基础
  2. 华为Matebook X Pro双系统升级bios后无法进入Linux的解决方案
  3. 剑指Offer之第一个只出现一次的字符
  4. 中国水平电泳系统市场趋势报告、技术动态创新及市场预测
  5. bios设置 联想m8000t_Ideapad 700-17笔记本使用bios设置u盘启动方法介绍【图文详解】...
  6. 倒计时2天!1024 程序员节全日程曝光,105 场深度演讲点燃数字经济新时代
  7. 你知道怎么用Python发送邮件吗?
  8. 国内首个比特币勒索病毒案告破,三年获利 500 万!
  9. 中国的第一座基站,你知道在哪吗?
  10. 中国开发者真实画像:Java长盛,偏爱Windows操作系统,鲜少参与开源项目