动荡的 Java 今年将有哪些新变化?

我们在《2018 编程语言流行度大调查》中谈到,在用户最喜爱和最关注的编程语言中,Java独领风骚。其中,Java 9关注度不断上升,62% 的人希望在 2018 年更多地关注 Java 9,此外有三分之一的参与者表示对即将到来的Java 10 和 11版本很感兴趣。

在过去的一年中Java经历了一段时间的动荡,今年Java又有什么新进展呢?本文让我们一起来看看Java的状况吧。

以下为译文:

2017年是Java界最动荡的一年。期待已久的Java 9带来了许多的变化和有趣的新功能,同时Oracle也宣布了JDK最新的发布时间表。而这一切只是个开始。过去开发人员常常抱怨Java的发展速度不够快。我认为这些抱怨将在不久的将来消失,甚至有可能带来意外的惊喜。

从2018年开始,JDK建立了全新的发布时间表。以前一次大的版本升级需要等好几年,现在则缩短为每隔6个月发布一次小版本。继2017年9月Java 9发布之后,Java 10将在2018年3月发布,以及之后更多的新版本都将很快到来。

欢迎工作一到五年的Java工程师朋友们加入Java技术交流:611481448

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

企业技术栈概览

大多数企业项目不仅使用JDK,还依赖一系列的企业级函数库,如Spring Boot、Java EE等,而这些函数库也将在接下来几个月中得到升级。我将在本文中重点讨论JDK,但是首先让我们来看看Java界中两个主要的企业技术栈将有哪些变化。

Spring开发团队正在努力开发Spring Boot 2,并在今年1月份发布了第一个RC版本。该团队并没有在API方面做出重大的变化,也不打算在最终版本发布之前添加任何新功能。所以,如果你的项目中用到了Spring Boot,那么最好现在仔细研究新版本,并开始计划现有Spring Boot应用程序的更新。

在2017年年底,Oracle将Java EE标准移交给了由Eclipse基金会管理的EE4J项目。正如大家所料,移交这样的一个大项目不可能在几天内完成,其中有很多组织和技术方面的工作需要完成。Java EE需要一个新名字并建立全新的开发流程。另一方面,保存在各种bug跟踪工具中的源代码和二进制文件的移交仍在进行中。开发者还需要等待很长一段时间,才能看到此次移交带来的效果,以及更强大的社区参与。

缩短JDK的发布和支持周期

Oracle去年宣布将在2018年内发布两个新的JDK版本。以往Oracle一贯秉承缓慢的版本发布节奏,每隔几年才发布一个主版本,其中包含大量的变化,从今年起将改为每6个月发布一个较小的版本。这一变化可以加速Java平台的创新,还可以降低Java更新带来的风险。而Java开发人员可以更加容易地熟悉小版本的最新变化,并将其应用到项目中。

我认为这对Java界是个非常积极的改变,它将为Java语言的开发增添新动力,JDK团队也可以更快地适应和创新。

JDK 10带来的变化和新功能

由于发布周期较短,Java 10只包含少量的变化。请参照OpenJDK网站公布的有关JDK 10的最新消息(http://openjdk.java.net/projects/jdk/10/),其中包含12个JEP(JDK Enhancement Proposal,JDK改进提案)。

其中最值得一提的变化是局部变量的类型推断(JEP 286,http://openjdk.java.net/jeps/286)。其次你应该了解下新增的基于时间的版本命名方式(JEP 322,http://openjdk.java.net/jeps/322),以及G1(或称Garbage First垃圾收集器)开始支持并行Full GC(JEP 307,http://openjdk.java.net/jeps/307)。

类型推断

JDK 10终于引入了类型推断。许多其他静态类型语言很早就已经支持这个功能了,众多Java开发人员一直希望引入这项功能。

JEP 286引入了关键字var,简化了局部变量的声明,并由编译器根据初始化代码推断变量的类型。以往我们必须写:

List paramNames = List.of("host.name","host.port");Configuration config = initializeConfig(paramNames);

现在可以简化为:

var paramNames = List.of("host.name","host.port");var config = initializeConfig(paramNames);

以上代码中,关键字var替代了冗长的变量声明。这可以增加代码的阅读性,特别在代码有合理的变量命名规则,并且变量仅在声明后使用几次的情况下尤为明显。

如果想更深入地了解JEP 286以及使用方法,可以参照Nicolai Parlog的这篇文章:https://blog.codefx.org/java/java-10-var-type-inference/。

基于时间的版本命名方式

从Java 10开始,Java的版本号格式将发生变化,以更好地支持基于时间的发布方式。

新的发布方式带来的最大难点在于:版本的实际内容可能发生变化。由于开始时唯一可以确定的只有新版本的发布时间,所以如果新功能的开发时间比预期长,无法在新版本发布时完成,就不能进入新版本。因此版本号需要以时间点为准,而非版本内包含的变更内容。

JEP 322定义的版本号格式为:$ 功能号.$ 临时号.$ 更新号.$ 补丁号,具体使用方法如下:

开发团队将在每6个月发布一个新功能版本,并将版本号的“$ 功能号”加1。

2018年3月发布的版本为JDK 10,那么9月份的新版本就是JDK 11。开发团队在JEP 223中表示,他们希望每次新功能发布可以至少包含一到两个重要功能。

“$ 临时号”可以灵活使用,目前以6个月为期的发布方式中并没有用到此项,所以到目前为止,这个数字始终是0。

开发团队还将在功能发布之间穿插小的升级,这种升级不会包含不兼容的改动。他们可以在功能发布后的1个月或3个月,发布一次小的升级,届时可以将“$ 更新号”加1。

G1的并行Full GC

对于大多数开发者来说,这只是个很小的变化。有的应用程序甚至都不会注意到这个变化。

JDK 9中G1成了默认的垃圾回收器。G1的设计目的旨在避免全面的垃圾回收,但是并不代表这种现象永远不会发生。不幸的是,G1在执行全面回收时仅使用了单线程的“标记-清理-压缩”算法,与之前的并行回收器相比这可能导致性能的下降。

JEP 307实现了这一算法的多线程版,从而解决了该问题。从JDK 10开始,它将使用与Young GC和Mixed GC同样多的线程数。

因此,如果应用程序需要强制垃圾回收器执行全面的回收,那么JDK 10可以提高效率。

有关JDK 11的计划

JDK 10还没有正式发布,而距离JDK 11的发布只有7个月了。所以,其开发团队已经制定了几个JEP的计划,请参照2018年第二次新功能发布的信息:http://openjdk.java.net/projects/jdk/11/。

除了删除废弃的Java EE和CORBA模型(JEP 320)、以及引入新的垃圾回收器(JEP 318)之外,JDK 11还有可能引入动态的类文件常量(JEP 309),以及在隐含类型的匿名表达式中支持关键字var(JEP 323)。

JDK 11目前的范围体现了缩短发布周期所带来的优势,JEP 309和310引入了新功能,而其他两个JEP则负责通过迭代方法改进已有功能。

2017年9月JDK 9发布的时候,Java EE和CORBA模块就被废弃了。一年以后,随着JDK 11的发布,JEP 320将把它们从JDK中删除。所以它们不会在Java中逗留太久,很快就要计划删除了。

继JEP 286在JDK 10中引入局部变量的类型推断后,JEP 323将进一步提升这一功能。将来我们可以看到更多关于这方面的改进。发布周期缩短后,团队可以分步在一次或多次功能发布中完成一个大功能,从而降低发布的难度。

缩短支持周期需要快速适应

Oracle在推出新的发布方式的同时,也改变了他们的支持方式。这个新的方式对短期发布和长期发布的支持所有不同。

短期发布(如Java 9和10等),相关的面向公众的支持会在下个版本发布时终止。因此Java 9的支持将于2018年3月停止,而2018年9月后Java 10也无法再获得支持。

Java 11是一次长期发布。Oracle对这类发布的支持期限更长,但是到目前为止,他们还没有宣布对Java 11的支持会持续到什么时候。

应用程序开发者需要决定是否要每6个月更新一次Java版本,还是选择多等几年使用长期的发布版本。另外,Oracle鼓励所有人使用Java SE的高级产品,它们的每个长期发布版都包含至少5年的支持。

总结

过去,大量开发者抱怨Java的升级太慢,2018年后这种情况将有所改善。全新的、6个月为期的发布周期和相应的支持模型,可以加速已有应用程序的升级,并定期引入新功能。加上Java EE和Spring等已有框架的提升,Java界内将出现全新的活力。另一方面,那些若干年才更新一次应用程序的各大公司要做好心理准备哦。

喜欢小编轻轻点个关注吧!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容