V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Joker123456789
V2EX  ›  Java

为什么就是没有人愿意升级到最新的 JDK?

  •  3
     
  •   Joker123456789 · 2022-10-28 10:33:42 +08:00 · 16748 次点击
    这是一个创建于 757 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这是我非常不理解的一件事,如果说老项目有历史包袱,那么新项目呢? 如果说 8 以上担心 费用问题,不是有 openjdk 吗?

    如果说 你做不了主,那么项目 leader 为什么不愿意用新的呢?站在公司外的角度来看,项目 leader 也是 java 开发者之一,他不是另一个群体。

    第 1 条附言  ·  2022-10-28 16:29:36 +08:00
    都在拿生态说事,我也是醉了,其他语言难道没这些问题??? 为什么他们就能一直用最新的呢? 而且 JDK 是向下兼容的。

    而且整个生态 都不升级,恰恰就是问题所在,这也是我发这个疑问的原因, 如果只是你不升级,那百分百是你个人的问题,谁会管你啊?

    还有说工作量的,安装 JDK17 比安装 8 步骤更繁琐吗?

    还有说利益的,lambda 又带来了什么利益?? 你们为什么一个个的 升级到 8 了? 怎么不停留在 6 ?
    144 条回复    2023-11-30 15:26:29 +08:00
    1  2  
    seakingii
        101
    seakingii  
       2022-10-29 10:43:53 +08:00
    @Aloento 同.NET 阵营,我用.NET 7 好久了(还不是正式版本)
    ClericPy
        102
    ClericPy  
       2022-10-29 10:54:21 +08:00
    就像有的公司还在用 python2 一样, 会啥用啥吧. 对大部分打工仔来说, 写代码可能就是为了换一碗饭吃, 之前同事的意思是 jdk 8 够用, 没必要升级, 毕竟当年看的书都是那版本, 升级以后出了问题的额外加班成本公司是不报销的

    (昨晚上升级 python3.11, 依赖得从头来一次, Windows 真各种坑爹编译问题, 准备写个 GUI 帮我去 lfd 上拉 whl 了)
    ericguo
        103
    ericguo  
       2022-10-29 11:13:17 +08:00
    @ClericPy 你同事说的没错,所幸的是你总算跳出来变成前同事了。
    ClericPy
        104
    ClericPy  
       2022-10-29 11:23:51 +08:00
    @ericguo 那些同事其实实力还是可以的, 但是他们业务很多总是被催的每周单休, 所以可能自己会用新版本, 但是写公司项目很少会没事找事吧, 怎么稳定怎么熟练怎么来

    工作这些年渐渐也看开了, 企业的第一要务还是盈利
    dayudayupao
        105
    dayudayupao  
       2022-10-29 11:31:45 +08:00
    @superrichman 你觉得就平时这些业务代码,能够遇上几个是新版本 jdk 才会导致的 bug
    charlie21
        106
    charlie21  
       2022-10-29 11:47:12 +08:00
    一个 10 名 ~ 50 名 C# .NET 开发者的公司如果要商用 .NET SDK 那么每年开销就是零元

    如果使用 java , 看看 oracle jdk store 告诉你商用授权一年需要多少钱

    https://shop.oracle.com

    每人每年 300 USD , 假设你公司有 10 名 ~ 50 名 java 软件工程师,则每年在 oracle jdk 方面的开销是 3000 USD ~ 1.5 万 USD (如果这是正确的计算方式),也就是 2.1 万 ~ 10.5 万元

    ---

    oracle jdk 8 最后一个免费版本是 8u202 (最后一个免费版),下载地址是

    https://www.oracle.com/au/java/technologies/javase/javase8-archive-downloads.html Java SE 8 Archive Downloads (JDK 8u202 and earlier) 在 2019 年 4 月 16 日发布的 oracle jdk 8u211 / 8u212 ,或者之后发布的新版本,就需要给 Oracle 交钱了。虽然它们依然是 jdk 8 ,即 从付费角度而言 oracle jdk 8 也有免费版版和付费版本
    crownzzz
        107
    crownzzz  
       2022-10-29 11:49:19 +08:00 via iPhone
    前段时间项目重构,我把 jdk 升到 11 ,然后小组长让降回 8…
    appstore54321
        108
    appstore54321  
       2022-10-29 12:02:53 +08:00 via iPhone
    1 谁升级,出了事故谁负责,有这时间我歇着不好吗
    2 公司的服务怎么养关我屁事,我就挣死工资
    3 需要提供升级好处的理由,为什么值得花时间升级
    4 有的东西还真就只在 jdk8 工作
    5 你还可以一开始就选 kotlin
    superrichman
        109
    superrichman  
       2022-10-29 12:03:55 +08:00 via Android   ❤️ 1
    @dayudayupao 你的项目里只有自己的代码?你不要用其它的库?你能保证那些库不会出问题?我用旧版本的是因为经过了时间的检验,这个版本组合经过多年验证没有问题,你用新版本出问题了怎么办?说不定某个库都不维护更新了,你还敢升级 jdk 吗?

    小项目怎么折腾都无所谓,大项目影响到可用性和连续性就是致命的。
    14104chk
        110
    14104chk  
       2022-10-29 12:58:26 +08:00   ❤️ 1
    我曾经遇到一个问题,刚出 JDK7 的时候,用 SQLServer 的官方驱动取出的时间就是和数据库的时间差整整 1 天,查了好久才确定是驱动和 JDK 不兼容的问题
    这个问题还好,测试的时候就能发现,但是我想说的是,不要以为 JDK 向下兼容就万事大吉
    FakNoCNName
        111
    FakNoCNName  
       2022-10-29 13:11:36 +08:00
    拿我们来说,开发人员是乐意推动升级的,但是报上去领导不同意,每次新的开发周期我们都会尝试推动升级,到今年已经被领导连续拒绝不下 4 次了。

    随后每次客户遇到问题找到大领导的时候,直属领导才会着急忙慌的让我们升级、重构。蛋疼!
    NXzCH8fP20468ML5
        112
    NXzCH8fP20468ML5  
       2022-10-29 13:20:45 +08:00
    老应用升级是不可能升级的,但有情怀的架构师会推动新项目上 JDK11 。
    不过新应用基本上都是年抛型,就导致技术资产很难沉淀下去。
    而且根据某部门反馈 JDK11 比 JDK8 不稳定,这把其他开发部门吓到了,就只敢用 JDK11 开发对内服务了。
    目前 JDK17 的升级看不上。ZGC 相对来说没用,吞吐量比延迟更重要。
    现在大家现在都在等 JDK21 和 Spring boot 3 ,等虚拟线程和分代 ZGC 。
    uni
        113
    uni  
       2022-10-29 14:00:05 +08:00
    我也一直很好奇这个问题,像前端的框架、基础设施,node ,python ,大家都在有条不紊地升级,java 碰到的升级的阻力理论上这些也应该都会碰到啊
    guyeu
        114
    guyeu  
       2022-10-29 14:15:47 +08:00
    我司新立项的项目都是 17 了
    a0210077
        115
    a0210077  
       2022-10-29 14:16:33 +08:00
    1 、我们很懒
    2 、新项目我都是力推 17 的,LST 版本,而且已经出来一段时间,稳定下来了
    3 、老项目没事不去动,虽说 JDK 大版本向下兼容性非常好,但不是说用 JAVA 写的所有库都能正常向上适配,需要对依赖的库进行全面检查,万一哪个库出现了骚操作编码就麻烦了。这样一来就需要对项目的所有内容进行测试,时间和人力成本少不了,项目越大成本越高
    c6h6benzene
        116
    c6h6benzene  
       2022-10-29 15:24:37 +08:00 via iPhone
    dayudayupao
        117
    dayudayupao  
       2022-10-29 15:27:32 +08:00
    @superrichman 嗯,你说的有道理,如果项目大了风险不好把控,小项目还好,就算有 bug 总能在特定时间内 hold 住
    NXzCH8fP20468ML5
        118
    NXzCH8fP20468ML5  
       2022-10-29 15:30:33 +08:00   ❤️ 1
    @uni 前端有是滚动升级,必须引入一个新包,最小 node14 ,这时候就得费时费力把所有不兼容的统统换掉,而且浏览器环境偶尔扔出一些错误照样跑,大不了多刷新几次,重试几次。
    java 你懂的,几乎所有包都兼容 jdk8 ,根本没用升级动力,所以还得看 spring boot 3 。
    而且前端也没好到那里去,vue1.x vue2.x angularjs1.x 还在看着呢。
    NXzCH8fP20468ML5
        119
    NXzCH8fP20468ML5  
       2022-10-29 15:43:50 +08:00   ❤️ 1
    @uni 突然想到一点也很重要,前端代码库普遍比较小(排除 node_modules 后),即使大项目也容易按照功能和路径进行拆分和升级。
    但是像 python3 都出来十几年年了,各大发行版 Linux 和 macos 这几年才默认不自带 py2 。
    另外基础设施是指 C++吗,照样升级不动,百度前几年 gcc 版本锁死 3.x ,这几年才升级上来,有 C++11 就谢天谢地了。
    uni
        120
    uni  
       2022-10-29 18:16:26 +08:00
    @xxfye 基础设施指的是 npm 升级到 pnpm 这种,还有 webpack 升级到 vite
    我觉得你说的有道理,java 在滚动升级这一块还得向 node 和 python 学一个(
    VERTU
        121
    VERTU  
       2022-10-29 19:04:34 +08:00
    公司项目的话一般会考虑 ROI 吧,如果升级后没有显著收益应该是不会有人愿意动一个如此"健壮"的系统
    janus77
        122
    janus77  
       2022-10-29 20:29:47 +08:00
    又不是不能用.jpg
    pony2335
        123
    pony2335  
       2022-10-29 20:41:02 +08:00
    springboot 不支持
    tanoak
        124
    tanoak  
       2022-10-29 21:57:47 +08:00
    @Anita720 修复了已经,
    HB9527
        125
    HB9527  
       2022-10-29 22:24:07 +08:00
    升级 JDK 涨工资吗?
    ikas
        126
    ikas  
       2022-10-29 22:54:01 +08:00
    入职新公司半年,已经将 jdk 从 8 升级了 17..



    如果你能决定技术栈..为啥都要在别人之后呢..



    很多人总有一堆理由..




    没意思..
    zachlhb
        127
    zachlhb  
       2022-10-30 07:15:27 +08:00 via iPhone
    Net core 不香吗,搞什么 java
    cyndihuifei
        128
    cyndihuifei  
       2022-10-30 08:47:06 +08:00
    其实真的只是不学习罢了,说公司说领导不让升级的人,估计自己的项目也不会想着要升级,没那么多借口
    tlmn
        129
    tlmn  
       2022-10-30 11:00:33 +08:00
    升级是需要成本的,其它语言升级有的是官方推动,直接不给维护了,社区也开始用新版本后,旧版本才慢慢褪去。

    但是你看社区里现在有多少用 JDK17 写的开源项目?
    seliote
        130
    seliote  
       2022-10-30 21:38:19 +08:00
    来我们公司吧,全线上 17 了
    winrar
        131
    winrar  
       2022-10-30 23:46:14 +08:00
    平时上班已经够忙了,还给自己找事。
    justRua
        132
    justRua  
       2022-10-31 09:45:54 +08:00
    新项目可以直接用最新的,老项目真的没必要,jdk 模块化是有破坏性的,一些旧点版本的框架没有适配升级,不加--add-opens 根本跑不起来
    cco
        133
    cco  
       2022-10-31 10:21:09 +08:00
    因为依赖问题啊,有些组件,中间件,模块就是不支持高版本 JDK ,经过大量的测试,也只是一部分升级到 JDK11 ,其他的高于 8 就报错,主要原因是依赖了其他公司的包、中间件等等,人家就是不支持 1.8 以上得。

    另外一个问题就是,每次升级都要大量得测试,现在一个人干两个人的活,开发人员也没时间去干,其次,管理人员也不愿意徒增风险,除非不得不升级,不然想让他们升级,做梦吧。
    yc8332
        134
    yc8332  
       2022-10-31 11:48:21 +08:00
    主要是没有理由去升级啊。。跑得好好的,为啥要给自己带来不确定的风险
    Joker123456789
        135
    Joker123456789  
    OP
       2022-10-31 17:33:05 +08:00
    @singerll 对啊,新项目除了 装 JDK ,还有什么多余的工作量? 你不会是要把写代码这种通用的工作量 也算进去吧?
    Anita720
        136
    Anita720  
       2022-11-09 09:55:19 +08:00
    @tanoak 没有呢,刚测试了下,mybatis-plus-boot-starter3.5.2,spring-boot-starter-parent2.7.4 ,jdk17.0.5 ,依旧报错
    bishengyang
        137
    bishengyang  
       2022-11-12 02:05:04 +08:00
    JDK9 引入了 JPMS ,造成了 breaking change 。
    Aresxue
        138
    Aresxue  
       2022-11-14 10:43:59 +08:00
    稍微大点的公司都是有基建的,很多都是基于 jdk8 的中间件去做二次封装和二次开发的,你让基建一下子全部适配高版本 jdk 几乎是一个不可能的事实,除非你要做一个独立性很强且足够简单的应用可以不依赖各种中间件和原有的登录、权限、账号体系,这样才算是真正的没有历史包袱的,否则上述每一个地方都会是拦路虎,到最后你可能会发现降级到 jdk8 是最佳方案。
    roundgis
        139
    roundgis  
       2023-01-14 18:17:05 +08:00 via Android
    @lmshl graalvm 社區版本 的 gc 聽說只有 serial gc 這種?
    lmshl
        140
    lmshl  
       2023-01-14 20:20:12 +08:00
    @roundgis
    GraalVM 有 G1GC 的
    你说的应该是 native-image 当前只能用 serial gc 吧
    roundgis
        141
    roundgis  
       2023-01-14 22:55:16 +08:00 via Android
    @lmshl 對 所以你們沒有用 native image?
    lmshl
        142
    lmshl  
       2023-01-14 23:19:39 +08:00
    @roundgis 有用过一段时间,后来没再采用,因为要给每个用到的库编写 reflection 和 proxy 表,太费精力了,也不可持续。
    后来还撞到了 native image 编译器的 bug ,回退到 20.x 可以编译,升级到 21.x 编译就会异常终止。
    roundgis
        143
    roundgis  
       2023-01-14 23:52:40 +08:00 via Android
    @lmshl 謝謝
    yiyiniu
        144
    yiyiniu  
       359 天前
    这个工具可以一键切换不同 JDK ,还能自动配置环境变量。可以看下: https://www.v2ex.com/t/992876 https://i.postimg.cc/htnYGWkM/b1.png
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1806 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:30 · PVG 00:30 · LAX 08:30 · JFK 11:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.