为什么大部分程序员还在用Java 8?

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

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


以下为译文:


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

image.png



数据来源: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 12 正式发布,8大新特性!


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


6 个月一次的发布节奏


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


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


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


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


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


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


长期支持版


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


image.png


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


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


image.png


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


但是,两个LTS之间的版本在下一个版本发布时就会失去支持。这就是说,Java 10会替代Java 9,而Java 11发布时又会替代Java 10。推荐:Java 10 最重要的 5 个新特性!

image.png



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


这就是如今出现这种局面的原因,一般来说,人们不会使用Java 9或10。就算他们用过,应该也都升级到了Java 11。推荐阅读:Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码。


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


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


只升级长期支持版本。对于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以及其后每六个月一次的新版本中引入的改进。


关注Java技术栈微信公众号,在后台回复关键字:Java,可以获取一份栈长整理的 Java 8-12 新特性干货。


作者 | Trisha Gee 原文:https://dzone.com/articles/beyond-java-8 译者 | 弯月 责编 | 屠敏 出品 | CSDN(ID:CSDNnews)


相关文章
|
1月前
|
存储 安全 Java
Java 程序员极速上手 go
Java 程序员极速上手 go
29 0
|
2月前
|
设计模式 缓存 分布式计算
|
3月前
|
人工智能 Java 大数据
Java程序员真的还有未来吗?如何备战2024春招?并狂拿大厂offer?
Java程序员还有未来吗? 嘿,小伙伴们,你们有没有想过Java程序员还有没有未来? 哈哈,别担心,我这就来给你们答疑解惑! 首先,让我们来看看Java的发展历程。自从Java诞生以来,它就一直是编程界的一颗璀璨明星。从Web应用到企业级应用,再到移动应用,Java无处不在。那么,现在呢?现在,随着人工智能、大数据和云计算的兴起,Java依然发挥着重要的作用。这些领域都需要大量的Java程序员来支持它们的发展。 那么,有人会说:“哎呀,现在出现了那么多新的编程语言和框架,Java程序员会不会被淘汰啊?”哈哈,别担心,Java程序员们!这些新语言和框架的出现并不会让Java消失。相反,它们
80 0
|
3月前
|
Java 程序员
Java程序员-你真的了解死锁吗
Java程序员-你真的了解死锁吗
37 0
|
4月前
|
存储 缓存 算法
Java程序员想年后跳槽,对JVM没有深入的理解,我劝你还是别跳了
Java 虚拟机是学习 Java 的基础,也是迈入高级 Java 开发工程师的必备知识点。所以今天这篇文章我们来聊聊如何从零开始学习 Java 虚拟机。
|
3月前
|
算法 架构师 安全
10年Java面试总结:Java程序员面试必备的面试技巧
作为一名资深10年Java技术专家,我参与了无数次的面试,无论是作为面试者还是面试官。在这里,我将分享我的一些面试经历和面试技巧,希望能帮助即将面临面试的Java程序员们。回顾我的Java职业生涯,我清晰地记得一次特别的面试经历。那是我申请一家知名科技公司的Java开发岗位。为了这次面试,我花了几周的时间准备,这不仅包括Java的基础和高级知识,还有关于公司产品的研究。
141 0
|
4月前
|
消息中间件 缓存 Java
一次阿里的面试经历,让“我”明白了Java程序员之间的差距
上周在拉勾上收到一个蚂蚁金服的大哥要我的简历,当时很惊讶,居然有蚂蚁金服的找到我,然后想都没想就给了。 受宠若惊呀,我知道自己的水平跟阿里的差距有多远,以前一直没用勇气去投,连试试都不敢。这次居然主动找过来了,当时就再想,难道阿里这么缺人么?还是只是为了完成某些KPI,当然了,我这种想法比较幼稚。
|
22天前
|
XML Java 程序员
作为Java程序员还不知道Spring中Bean创建过程和作用?
作为Java程序员还不知道Spring中Bean创建过程和作用?
13 0
|
1月前
|
Java 程序员 数据安全/隐私保护
【Java每日一题】——第十二题:完成百战程序员系统登录功能
【Java每日一题】——第十二题:完成百战程序员系统登录功能
30 0
|
3月前
|
算法 搜索推荐 Java
java程序员,是不是很想进字节跳动?开发三年的我拿到了入职通知
别误会哈,不是老苏我哈,老苏没有奔着大厂去奋斗的精力了! 这是一个来自粉丝(程序员小博)的投稿