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

原创 2017年12月05日 00:00:00

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

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

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

其中,整个 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 (欧洲、中东、非洲三地区的合称)开发者的调查结果:

0?wx_fmt=png

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

0?wx_fmt=png

综合结果:

0?wx_fmt=png

使用 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 —————

0?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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


640?wx_fmt=jpeg640?wx_fmt=png

版权声明:本文为博主原创文章,未经博主允许不得转载。

阿里云服务器配置java生产环境jdk1.7+tomcat7.0+mysql5.5(一)

2017/4/10  在阿里云买了一台自己玩的服务器,今天试着搭建java生产环境,以下是学习过程。 我的服务器配置: 一、安装Mysql5.5 1.下载镜像:地址:http://mirror...

阿里云服务器配置java生产环境jdk1.7+tomcat7.0+mysql5.5(二)

二、安装jdk1.7 1.下载rpm包  地址 http://pan.baidu.com/s/1qXMlJcg 2.上传jdk到 usr/java/jdk下;  3.安装 ...

生产环境实战spark (9)分布式集群 5台设备 SPARK集群安装

生产环境实战spark (9)分布式集群 5台设备 SPARK集群安装1, 上传spark到master,检查[root@master rhzf_spark_setupTools]# ls hadoo...

Hyperformix模拟生产环境使用说明

  • 2012年07月02日 14:47
  • 954KB
  • 下载

Spark Release 2.2.0 最新版本发布,Spark 2.2.0是Spark 2.x中第一个在生产环境可以使用的版本,对于Spark具有里程碑意义

第2章 Spark 2.X技术及原理 Apache官方网站于2017年7月11日发布了Spark Release 2.2.0版本, Apache Spark 2.2.0版本是Spark 2.x系列上的...

zabbix生产环境当中的应用

  • 2016年08月13日 12:38
  • 160KB
  • 下载

MySQL数据库生产环境维护

  • 2011年11月11日 09:13
  • 228KB
  • 下载

VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址

前言 我们在开发项目的时候,往往会在同一个局域网进行开发,前后端分离同时进行开发。我们前端调用后端给的接口也是在局域网内部的。但是,当项目推到线上的时候,我们会从真实服务器上获取接口,因此,我们...

面向生产环境的SOA系统设计

  • 2009年11月26日 09:46
  • 1.4MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JDK 9 发布仅数月,为何在生产环境中却频遭嫌弃?
举报原因:
原因补充:

(最多只允许输入30个字)