【CSDN 编者按】不说 Android,Java 本身都很碎片化。尽管 Java 升级换代,但于开发者来说,还是紧紧地抱着 Java 8 不放。这是为什么呢?一起来看。

作者 | Trisha Gee

译者 | 弯月

责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

以下为译文:

近日的调查结果显示,绝大多数开发人员的主要应用程序中使用的还是 Java 8。

数据来源:https://snyk.io/blog/jvm-ecosystem-report-2018/

在Java 8之前,用户接受更高版本的Java的过程非常缓慢,特别是在企业中,因为在生产环境中接受新版本Java非常困难。而引入了Lambda表达式和流的Java 8对许多开发人员来说都非常有吸引力。同时,微服务、持续发布实践和更好的自动化测试也让接受新版本语言变得更容易,风险比以前更小。

那么,鉴于这些因素,为什么从Java 9开始每年两次发布新版本的情况下,开发人员还在坚持使用Java 8呢?目前Java最新的版本是Java 12,然而很少有人使用9~12的版本。

估计你能猜到这其中的原因:“很复杂”。Java 8之后的版本发生了很多变化,这可能会导致各个公司在Java升级上举棋不定。

6 个月一次的发布节奏

从2017年9月发布Java 9开始,Oracle每六个月就会发布一个新版本的JDK,具体来说是每年的三月和九月。现在持续发布大行其道,所以一门语言一改以往三年发布一次的做法,转而采用更快的发布速度,这也完全合情合理。

在新的发布节奏下,不会再出现每几年发布一大堆功能的情况(伴随着风险极高的大型升级),而是在预定的日期内推出更小的发布。当然,这些发布包含的功能会少很多,但这种方式有几个好处:

  1. 方便计划。预定的发布节奏不仅方便了语言开发者,也方便使用者制定升级计划。

  2. 更高的质量。更频繁的发布意味着如果某次发布中某个功能没有做好,就会被推迟到下一次发布。因此,语言开发者的压力更小,不需要赶工完成功能,因此每次发布的质量更高。

  3. 稳定的新功能来源。以前是每三年一次巨大的更新,而现在可以持续地获得更新,包括语言特性、垃圾收集器的变化和性能改善。

如此快的发布节奏也可能造成的负面影响,例如许多组织根本跟不上六个月一次的升级节奏。这一点也在考虑中,因为Oracle也会受到这个影响。

长期支持版

Oracle不愿意像以前每三年发布一个版本时那样支持每个旧版本,这样做的成本太高。

如果Oracle每六个月发布的版本都要支持三年,那么在2020年前后他们就要支持六个不同的版本!

相反,他们说每三年会有一个“长期支持的版本”(Long Term Support release,简称LTS),该版本会提供为期三年的支持。Java 8是一个LTS,当前的LTS是Java 11,下一个应该是Java 17。

Oracle每三年选择一个版本提供长期支持和更新,其他版本仅支持六个月。

但是,两个LTS之间的版本在下一个版本发布时就会失去支持。这就是说,Java 10会替代Java 9,而Java 11发布时又会替代Java 10。

开发人员在升级Java 8时一般会直接升级到Java 11。

这就是如今出现这种局面的原因,一般来说,人们不会使用Java 9或10。就算他们用过,应该也都升级到了Java 11。

短期版本应该在新版本发布后立即升级,长期版本会支持至少三年,因此现在有两种主要的升级途径:

  1. 每六个月新版本一出来就升级。这意味着每六个月就要使用最新版本。这样做的好处是能够立即获得新的语言特性,但这种方式通常只适合那些习惯于迅速升级技术栈的人们。

  2. 只升级长期支持版本。对于Java开发人员来说这种节奏更为熟悉。这种升级有三年一次大型升级的缺点,但人们有更多时间来评价这种升级带来的风险。

也许还有一个折中的办法:在生产环境中使用LTS版本,同时在CI中确保应用程序能在每六个月一次的新版本上运行。这样既能将大型升级的风险降到最低,同时还能维护生产环境要求的稳定性。

授权变化

长期支持版本有个问题。Oracle的立场是,如果你需要长达三年的支持和更新,就应当考虑为其付费。所以,如果你想使用LTS版本并要求三年的支持,就要为Oracle的商业版JDK付费。

但是,Oracle也认识到并不是每个人都愿意付费,而且许多人更喜欢用开源的方式工作,所以他们现在有两个版本的JDK,其特性完全一样,但授权不同。商业版JDK可以在开发和测试中免费使用,但在生产环境中使用则需要付费;还有一个完全免费的OpenJDK版本。后者采用了开源的GPLv2+CPE授权,但其生命周期只有六个月。

从竞争的观点来看,这其实是好事。Oracle始终会将JDK中的功能移植到OpenJDK中,甚至还包括那些曾经用于商业版的功能,如Java Flight Recorder和Java Mission Control等。所以,由OpenJDK产生的一切JDK(也是绝大部分人都在使用的JDK)会包含你曾经用过的一切特性,甚至还会包括一些你没用过的特性。

还有许多其他供应商提供JDK。大部分是免费的,部分JDK的支持时间和期限与Oracke JDK不一样。这篇文档(https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/preview#heading=h.xn49s5cqkp4j)列出了不同的选项,并按照可以免费使用、必须拥有商业授权才能使用的方式分类。如果这些信息难以消化,那么最好的方法就是下载AdoptOpenJDK(https://adoptopenjdk.net/)构建的OpenJDK。这个JDK与Oracle JDK完全兼容,而且主要的操作系统和平台上都有,你可以选择不同的JVM(Hotspot或OpenJ9),他们还承诺为LTS版本提供至少四年的支持,而且还可以购买商业支持。

由于这个话题可能会非常复杂,我强烈建议阅读Java Champion的这篇文章《Java Is Still Free》(https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/preview),文中提供了更详细的信息。

总结

从Java 8发布之后许多情况都发生了改变:六个月一次的更新;授权、更新和支持的变化,以及JDK的获取途径等。在此之上还有语言变化,包括那些Java 9中引入的主要变化。

虽然这些变化让人头晕目眩,但其目的是为了给世界上最流行的语言提供高质量、频繁且在计划内的更新,同时让负责该语言的人能够持续做下去。

我们需要理解,这些改变可能会影响你的应用程序和组织,通过学习如何接受这些变化,最终会让你接受Java 8以及其后每六个月一次的新版本中引入的改进。

原文:https://dzone.com/articles/beyond-java-8

本文为 CSDN 翻译,转载请注明来源出处。

【END】

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

 热 文 推 荐 

华为员工年薪 200 万!真相让人心酸!

保送清华成博士,华为 12 年搞通信,他为何如此看待 5G ?| 人物志

真正勇猛的程序员,敢于让鲁迅崩溃!

☞ 调查 10,000 名学生开发者:65% 自学成才,学 6 门编程语言!

@程序员,不加班就滚吧 | 程序员有话说

独家! 币安被盗原因找到了! 7074枚比特币竟是这样丢掉的

☞ 用对方法,开发与部署深度学习原来如此简单……

什么叫云原生应用?| 技术头条

☞ 补偿100万?Oracle裁900+程序员,新方案已出!

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

为什么程序员都不愿意升级 Java 8?相关推荐

  1. 无责任书评:每个Java程序员都应该深入理解Java虚拟机!

    Java这门语言的发展是很有意思的,它不像Python, Ruby 等完全是开源社区驱动,也不像C#,VB.NET主要由微软操刀.它是一个以Oracle(之前是Sun)为主,各大巨头一起参与,一起制定 ...

  2. 作为Java程序员都应掌握:java考试题及答案大一

    开头 我们面试的时候 ,经常会被问这种到问题:Spring中bean的循环依赖怎么解决? Spring中bean的加载过程? spring相关的问题一直是大厂面试常问到的一个问题,也是一直困扰这我们, ...

  3. Java程序员都30岁了,还剩下5年“寿命”,这就是所谓的中年危机?

    Java程序员都30岁了,还剩下5年"寿命",这就是所谓的中年危机? 30岁时,我是一个程序员,离传说中的"退休"只有5年了,为了优雅从容的所谓"光荣 ...

  4. java cron表达式_Java 程序员都应该去使用一下这款强大的国产工具类库

    大家好,我是你们的导师, 我会坚持每天给大家整理一些干货内容(当然周末也要允许老师休息一下哈). 今天给大家分享一个很棒的Java工具类库:Hutool.可能有很多朋友已经知道这个类库了,甚至在已经在 ...

  5. Java程序员的典型工作过程有哪些_Java程序员都要经历哪些阶段

    原标题:Java程序员都要经历哪些阶段 程序员从菜鸟到优秀的过程是需要时间,经验,不断的进阶,小编和大家一起看看每个阶段都要经历哪些成长阵痛: 没有防卫 这个阶段很快就会过去,因为有无数的书本和&qu ...

  6. scala语言的底层是java实现的_2020了,每个程序员都该学习的 5 种开发语言

    我曾在某处读到过(可能在<代码大全>,但我不敢确定),程序员应该每年学习一门新的编程语言.但如果做不到,我建议,你至少学习以下 5 种开发语言,以便你在职业生涯有很好的表现. 每个公司都喜 ...

  7. json java 数据类型_程序员都应该了解的一种数据格式之 JSON

    原标题:程序员都应该了解的一种数据格式之 JSON 作者 | 猪哥 责编 | maozz JSON的诞生原因是因为XML整合到HTML中各个浏览器实现的细节不尽相同,所以道格拉斯·克罗克福特(Doug ...

  8. Java程序员都是青春饭吗?

    Java程序员都是青春饭吗?过了35岁还能找到工作吗?会不会没人要了?随着IT行业的发展,互联网行业龙头企业中都流传一句话35岁是程序员的一个坎,过去了就没事,过不去就会被裁掉.正因为这句话大家才会认 ...

  9. Java后端程序员都做些什么?

    这个问题来自于QQ网友,一句两句说不清楚,索性写个文章. 我刚开始做Web开发的时候,根本没有前端,后端之说. 原因很简单,那个时候服务器端的代码就是一切:接受浏览器的请求,实现业务逻辑,访问数据库, ...

最新文章

  1. SAP有用的NOTE(持续更新)
  2. mysql 开发进阶篇系列 32 工具篇(mysqladmin工具)
  3. 【小白学习PyTorch教程】十七、 PyTorch 中 数据集torchvision和torchtext
  4. 写存储过程与调用存储过程
  5. 利用SharedPreferences完成记住账号密码的功能
  6. 设计模式(17) 访问者模式(VISITOR) C++实现
  7. 在团800运维工作总结之couchbase使用
  8. 微软发布 VS Code Remote,开启远程开发新时代!
  9. RedHat7 Git 安装使用
  10. Acrobat Pro DC 2022 Mac(全能PDF工具)完美兼容m1
  11. 计算机显示去掉拼音分类,win10系统取消电脑文件显示以字母数字拼音分组的解决方法...
  12. 多家波卡生态项目招聘开发者,高薪职位等你来 Pick
  13. 【vscode简单入门(三)】vscode巨实用的基础插件推荐(不定期更新)
  14. 相机选型焦距、距离的计算
  15. java dnf 自动打怪,按键精灵 做DNF 自动刷图辅助
  16. Meta-SR: A Magnification-Arbitrary Network for Super-Resolution
  17. android火焰图分析,android实现简单的火焰效果
  18. 【图像检测】基于 AlexNet 和 SVM 实现异常螺母检测附matlab代码
  19. 华为OD入职一年介绍和建议
  20. 【Linux】修改Xshell 7默认配色方案和会话属性

热门文章

  1. spinningup 绘制曲线
  2. 论文阅读:Spatial context-aware network for salient object detection
  3. c语言1234为什么不是常量,C语言学习1
  4. 【演化学习】初识platEMO-MOEA/D、NSGA-Ⅱ-DTLZ、HV
  5. SQL实战之查找所有员工的last_name和first_name以及对应部门编号dept_no
  6. C++11的dynamic_cast
  7. 中国哌唑替芬行业市场供需与战略研究报告
  8. 2021-2025年中国定时控制器行业市场供需与战略研究报告
  9. 2019级C语言大作业 - HP1的勇者
  10. 我的世界java版如何装mod_我的世界考古“初代贝爷生存”?开局3滴血,还没进游戏就要自闭了...