Java17已经出现一年了,为什么仍然有那么多的公司使用Java11 甚至 Java8?

Java 17 VS Java 8: 新旧对决,这些Java 17新特性你不容错过 Java是一门非常流行的编程语言,由于其跨平台性、可移植性以及强大的面向对象特性而备受青睐。Java最初由Sun Microsystems公司于1995年推出,随着时间的推移,Java发展迅速,版本不断更新。本篇博客将重点介绍Java 17与Java 8的对比,以及Java 17的新特性。 阅读详情

Java17 自2021年9月14日发布以来已经一年的时间了,使用JDK8的小伙伴仍然有很多,是什么原因导致那么多的用户不愿意升级Java版本?

 

  • 你所使用的JDk开发版本是由你需要支持的最老的系统决定的,而不是最新的系统。有时,它可能会令人惊讶地古老。
  • 平台升级总是有风险的。很早以前我将一个系统从Java 5升级到了Java 6,它破坏了JBoss。事实证明,那个版本的JBoss依赖于核心API返回的数组中值的顺序。API没有承诺任何特定的顺序,但JBoss实现假设顺序总是相同的。它在Java 6中发生了变化,并迫使人们对自己的配置文件进行一些更改,以便启动JBoss。这令人惊讶,因为从5到6的过渡本该是无缝的。
  • 从Java 8到Java17的过渡并不是无缝的,因为在9-10-11版本中有很多变化。这就是为什么许多项目都坚持使用Java 8的主要原因。Java承诺“一次编写,到处运行”,但它并没有完全实现“永远运行”。
  • 以下是主要的转变:

    (1).Java 1.4到Java 5:在Java 5中,类字面量成为了jvm级别的实体。在Java 1.4中,当你引用一个类文字时,它会执行一个class字节码中的forName。从Java 5开始,对类字面量的引用将从常量池加载一个对象。这就产生了一个新的情况:一个类被加载但没有初始化。一些现有的Java代码假设,当你引用类字面量时,将调用它的静态初始化式。这不再是正确的,并破坏了做这个假设的代码。

    (2).Java 6到Java 8: Java 7 JVM引入了方法句柄作为新的JVM实体。Java编译器直到Java 8才使用它们,并在lambda表达式的实现中使用它们。所以Java 6到Java 7没有做太多的工作,但是Java 8生成的字节码有一些主要的区别。除了像JBoss这样令人惊讶的例子之外,这是对Java 5-7的无缝升级。

    (3).Java 8到Java 9-10-11: Java 9引入了模块系统。这是一个根本性的改变,它在执行反射时引入了关于可见性的新规则。它还从核心中完全删除了一些库。Java开始遵循一种新的模式,即一个版本将更改表示为警告,下一个版本将使用禁用选项强制执行这些更改,而第三个版本将毫无例外地强制执行这些更改。从Java 8升级系统可能需要做很多工作,包括重新添加现在丢失的核心库,以及在反射中处理新的可见性规则。

    (4) . 比Java 11更好:虽然模块系统带来的巨大破坏在一段时间内不太可能再次发生(如果有的话),但我们将看到一系列稳定的弃用和删除,Java平台将纠正一些“过去的错误”。

  • 在非常严肃的软件开发世界中,只有两个月历史的东西被普遍认为是“未经验证的技术”、“重大安全问题”和“不合理的风险”。
  • 关于“长期支持”、可能要到2022年底才会被考虑。就我而言,选择继续使用Java 8有点过于保守,但是,我理解这个决定。目前,可靠性和创新的最佳点(尽管对于Java开发来说这是一个强烈的词)是Java 11。
  • 在过去的三年中,它已经证明了自己,它是对Java 8的一个相当不错的改进,值得一试。Java从11年到17年的发展方向是一个有趣的方向,尽管,让我们诚实地说,它似乎是Kotlin 1.0中已经存在的东西的衍生品。认为这些特性有价值的项目已经在使用Kotlin而不是Java。
  • 总而言之,Java 17 LTS肯定会被考虑,只是不是现在。就像我在第一段说的,在我们考虑这个问题之前,可能要到2022年底或2023年初。
  • 没有商业理由升级。好的,再详细一点:如果Java 17为他们提供了一个新特性,可以为他们节省几千元或几万元,并且节省的金钱足够多,让他们有理由去冒升级的风险——这通常随着代码库的大小而增加——那么他们就会升级。
  • 为什么要“升级”到一个没什么可提供的版本?也就是说,最好的做法是及时更新安全补丁和小的改进。
  • 靠炒作驱动的开发在实际的软件开发世界中是行不通的。我们需要考虑在进行升级之前是否需要升级,这可能涉及到强调优点和强调缺点的人之间进行讨论。通常兼容性不应该以任何方式牺牲,所有工作的都应该继续工作。
  • 对于任何Java项目,你能保证升级始终是正确的吗?接下来,如果以上都能保证,又能带来什么呢?更好的性能吗?更经济的内存使用?如果有新的功能,会是有益的吗?如果是,以什么方式?你必须回答所有的问题,而且要令人信服。我唯一一次成功说服版本升级是当我们的代码需要剖析功能,而我们目前使用的版本不支持,我甚至尝试过由于缺少低层模块而去移植。
  • 没有任何一个理智的项目经理会在新建的项目中使用最前沿的技术:风险和潜在的技术债务(程式码当中一些不寻常的地方。)是很大的。任何一个理智的公司都不会重构现有的代码库来利用最新最好的特性。技术债务是相当大的,而其影响是未知的。目前,我仍然在维护一个使用Struts 1.0的Java 1.6应用程序。这是我日常工作的一部分(1-2小时)。你不能简单地想着跳转到另一个(最新的,嗖的一下)版本,然后就期待一切都顺理成情理。保守地开发软件,不加理会语言的新特性是正确方法。
  • 开发一个应用程序可能需要2到3年的时间,在这段时间内,很难不断更新到最新版本的Java,同时仍然在实现系统方面取得进展,因为你最终将花费所有的时间重构代码,以修复上次Java更新破坏的内容。因此,大多数公司在项目开始时选择Java版本,并一直使用该版本,直到主要开发完成。然后他们将更新到较新的java版本视为技术债务(Technical Debt)。
  • 更新到新版本的Java通常需要更新到新版本的库,这可能会影响到大量的传递依赖性。这就需要重构代码,因为在库的新版本中所做的更改是破坏性的。即使是那些试图保持广泛兼容的库,也经常会有与旧版本不兼容的更改。所以必须测试所有内容(希望你有一个好的测试套件)。当所有的重构都完成并再次工作时,所有的东西又都过时了,因此这个循环永远不会结束。

Java 8(JDK 1.8)升级更新至 Java 11(JDK 11)/ Java 17(JDK 17)LTS 一、JDK的下载;二、JDK的安装;三、配置环境变量;四、(附)ADB环境变量配置。 阅读详情

相关推荐

2021 Java 这一年

Java2021年都干什么了?

qq_43529978的博客 7171

为什么很多企业依然再用jdk8而不是使用最新版本jdk17?

兼容性问题:JDK 8 是一个经过长期使用和测试的稳定版本,与许多企业应用程序和库已经兼容,而升级到新版本可能会导致兼容性问题。如果企业依赖于过时的库或框架,则升级到 JDK 17 可能会增加安全风险,因为这些库可能不支持最新版本的 JDK,从而使企业的系统容易受到攻击。如果企业在 JDK 8 上运行的应用程序已经满足其性能要求,则他们可能不愿意冒着在升级时引入性能问题的风险。综上所述,虽然 JDK 17 有很多新功能和改进,但是在升级之前,企业需要考虑到兼容性、安全、维护和性能等方面的问题。

千锋教育 3808

ROS2零拷贝避坑指南:Fast DDS共享内存配置常见问题与排查方法

本文深入解析ROS2 Humble中Fast DDS的零拷贝机制,提供共享内存配置的常见问题排查方法。从环境变量设置、XML配置文件到运行时诊断工具,全面指导开发者高效实现进程间数据传输优化,避免低效拷贝问题。特别针对/dev/shm无文件生成等典型场景给出解决方案。

weixin_30379531的博客 478

Java 8、11、17版本对比:新特性与性能差异分析

自Java 9以来,Java开始了一个新的发布节奏,即每六个月一个特性版本,但每隔几个版本会有一个LTS版本,如Java 8、11、17等。例如,引入了JVM Flight Recorder,它是一个高性能的数据采集工具,用于诊断Java应用和JVM本身的问题。Java 17的JVM在G1和ZGC垃圾收集器、JIT编译器等方面都进行了细微的优化和调整,确保更好的性能和响应速度。:从Java 8的G1到Java 11的ZGC,再到Java 17中的持续优化,垃圾收集的效率和延迟得到了明显的提高。

m0_57781768的博客 3833

浅谈python反序列化漏洞

0x01 python序列化与反序列化 Python 的序列化和反序列化是将一个类对象向字节流转化从而进行存储和传输,然后使用的时候再将字节流转化回原始的对象的一个过程。python中的序列化操作是通过pickle模块,而该模块主要包含l dumps将dict转化为str格式,loads将str格式转化为dict格式。 dump和load与文件操作结合起来, pickle.dump(obj, f...

Lethe's Blog 3220

新手必看!无人机定高PID调参避坑指南:从理论到实战的完整流程

本文为无人机新手提供定高PID调参的完整指南,从传感器融合到抗风策略,详细解析多传感器融合、PID控制参数调试及环境干扰应对。通过实战案例和代码示例,帮助开发者快速掌握无人机定高技术,避免常见调参陷阱,提升飞行稳定性。

spark7igniter的博客 221

2024全网最全Java 11 升Java 17 重要特性对比专题(25秋招走起~)

25秋招后端开发+面试技巧

Wangzc_1116的博客 1422

5QI(5G QoS Identifier)

此外,5QI与网络切片(Network Slicing)密切相关,网络切片允许网络运营商在物理网络内部创建虚拟网络,为不同的客户和用例提供定制化服务和QoS。5QI(5G QoS Identifier)在5G网络中用于标识不同的服务质量要求,它允许网络对不同的数据流进行优先级划分和资源分配。:5QI的实施需要对5G网络的QoS参数有深入的理解,包括延迟、吞吐量、数据包丢失率等,这对技术人员提出了较高的要求。不是所有的5G设备都支持5QI的全部功能,这可能会限制5QI应用的广泛性。

记录有价值的内容 6533

从 Java8 到 Java11 再到 Java17 的新特性(1)

从 JDK8 之后,Java 的更新策略改为以时间驱动的方式,每六个月发布一个新的Java版本,每三年发表一个长期支持版本。一般如果要对旧 JDK 进行升级,都会选择长期支持版,JDK11 和最近更新的 JDK17 是长期支持版本。但是由于商业项目更看重稳定性,更新 JDK 带来的收益不大,大多数人不愿意踩坑去更新 JDK。因此,很多人都只是从新闻了解到新 JDK 的新特性,平常开发没有接触到,甚至有些在用 JDK8 的人连 JDK8 的新特性都用不利索或者直接就不知道。其实许多新特性是可以简化我们的开发,

u012809062的博客 8568

基于Python的股票K线图爬取与形态识别系统

本文详细介绍了一个基于Python的股票K线图爬取与形态识别系统。该系统通过网络爬虫技术获取股票历史数据,使用Matplotlib生成K线图,并应用卷积神经网络(CNN)对经典K线形态进行识别。文章详细阐述了数据采集、K线图生成、CNN模型构建与训练的完整流程,并提供了完整的代码实现。本研究为金融科技领域的毕业设计提供了有价值的参考方案。关键词:Python爬虫、K线图、卷积神经网络、形态识别、股票交易。

2201_76125261的博客 1033

库存优化技术提升电商效率

第一部分:库存优化技术基础 第1章:库存优化的基本概念 库存优化是现代电商运营中至关重要的一个环节。简单来说,库存优化指的是通过一系列的策略和技术手段,使得库存管理更加高效、准确,从而降低运营成本,提高销售额。 1.1 库存优化的定义与重要性

AI天才研究院 1248

Java 14 都快来了,为什么还有这么多人固守Java 8?

从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...

码农翻身 8万+

【瑞芯微px30】【RTL8363】【一】驱动移植-网卡驱动概述

linux rtl8363驱动移植

weixin_34799243的博客 1180

java8 java11 java17对比分析和选型

Java 8、Java 11和Java 17作为Java的三个重要版本,各自在功能、性能以及支持方面有着显著的区别。下面将从多个方面对这三个版本进行对比,并给出选型建议。

Licky13的博客 1950

081、空间降噪(Spatial Denoise)实战:双边滤波、非局部均值与BM3D在ISP中的调优

调参时,别只看PSNR/SSIM。找几个典型场景(夜景、人像、文字、天空),在真实设备上肉眼对比。我见过PSNR涨了2dB但图像看起来更差的案例——因为PSNR不惩罚纹理丢失。空间降噪这块,理论说再多,不如动手调一次。下次遇到噪点问题,先别急着上BM3D,试试双边滤波的自适应参数,说不定有惊喜。

zzfmlxs的博客 46

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Java】从java8到java17各版本新特性详解

下面这张图是 Oracle 官方给出的 Oracle JDK 支持的时间线,可以看出,JDK 17的支持时间最长,可以延续到2029年9月。考虑到技术更新的速度,这次免费商用8年的时间可谓是经过精心考虑,旨在让用户放心地升级到JDK 17(不过JDK 8的支持时间更长,可以延续到2030年12月)。从JDK诞生到现在,仅有几个版本得到了长期支持,主要包括JDK 7、JDK 8、JDK 11以及即将发布的JDK 17,它将是继Java 8之后最重要的LTS版本,是Java社区八年努力的成果。

一个天蝎座的程序猿 5891

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

为什么现在2025了很多公司都还在用java8?

Oracle(和OpenJDK社区)为某些特定版本提供长期的、优先的错误修复、安全补丁和性能优化支持。这些版本被称为长期支持(LTS)版本。

N年后的博客 1223

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java 8 & 11 & 17 & 21

当某个行为或操作独立于具体对象时,可以考虑使用函数。函数可以独立存在,不依赖于特定的对象实例。函数可以作为参数传递给其他函数,可以作为返回值返回,可以用于函数式编程等场景。)是指属于某个类或对象的行为或操作,它是面向对象编程的基本组成部分。方法通常用于描述对象的行为,可以访问对象的属性并对其进行操作。当需要描述某个对象的行为或操作时,通常应该使用方法。)是独立于对象的,可以独立存在的一段代码,它接受输入参数并返回一个值。方法可以被继承,可以被重写,可以实现接口,从而实现多态。中,函数通常指的是静态方法(

保持初心 保持好奇 936

Java 17到底有多快?

不想更新,但又不得不。面对软件版本的频繁更新,你是开心呢,还是无奈呢? 都说Java 8 是YYDS,那你注意到 Java 17 已经正式发布了吗?目前Java 18 也已经进入早期开发阶段。 Java 官方团队已在OpenJDK邮件中确认,8月6号发布的 JDK 17 build 35 可正式作为GA版本使用,期间没有报告任何P1错误。 据Oracle Java SE支持路线图显示,Java 17 是自Java 11以来的首个长期支持版本。Java 版本通常是6个月一更新,时间分别在3月和9月,而这些版

mengyidan的专栏 1万+

深度解读 JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

Java 的版本从 JDK 8 到 JDK 21,不仅仅是语法糖的增加或标准库的扩展,它反映了 Java 社区对性能提升、并发处理以及开发者体验的深刻理解。每个版本都有其显著的特性,从 JDK 8 的 Lambda 表达式和 Stream API,到 JDK 21 的虚拟线程和模式匹配,Java 正在变得更现代、更高效,开发者也能通过这些新特性写出更加简洁、优雅的代码。

龚小帅的博客 1万+

java8 升级 java17

模块系统(Java Platform Module System):引入了一种新的模块化编程方式,称为Java平台模块系统(JPMS),它提供了更好的代码隔离和可重用性,以及更精细的依赖管理。JShell:JDK 9引入了一个交互式的编程环境,称为JShell。它允许开发人员在不需要编写完整程序的情况下,直接在控制台上执行和测试Java代码片段。私有接口方法:在JDK 9之前,接口中的所有方法都是公共的。

sun_csdn_id的博客 4339

Java 8、Java 11、Java 17和Java 21的比较

从Java 9开始,Oracle引入了新的六个月发布周期。这意味着每年会发布两个新的Java版本。然而,长期支持(LTS)版本——如Java 8、11、17和现在的21——每隔几年发布一次,并且支持时间更长。

qq_28791753的博客 2940

JDK 8、JDK 11、JDK 17比较

新增 List.of() 、 Set.of() 、 Map.of() 创建不可变集合(如 List.of(1,2,3) ),比 Collections.unmodifiableList() 更简洁,且性能更好(底层为专用不可变实现)。新增 String.isBlank() (判断是否全为空白字符)、 strip() (移除首尾空白,支持 Unicode 空白)、 repeat(n) (重复字符串 n 次)等方法,比 trim() 更强大。

Jun_HNU的博客 2812

关于万年Java 8升级Java 11 - 17那件事情

在互联网的时代中,JVM在各地蓬勃发展,我们有数以万计的java开发人员,总共有30亿多个JVM在跑,作为庞大群里中的一员,他们并不关心外部分布,依然坚持自己使用的Java版本,只能说毅力惊人,今天其实可以开始考虑,只要正在做的东西可以从新的JDK版本中受益,那不妨升级一下还是有用的。高的版本会带来性能改进,可能很小,但是在某一个情况可能只有百分比、千分比或者什么都没有,但是随着时间的推移,将会获得免费的性能,如从服务器几百万的费用中抽取一个百分比,就能获取免费的性能,何乐而不为。...

jsonms的博客 2262

8个从Java 11到Java17中的功能提升

介绍Java 17的新特性和在迁移过程中需要注意的潜在问题。

u013643074的博客 908

Java 17 采用率增长 430%、Java 11 稳居第一,最新 Java 编程语言报告来了!

编译 |苏宓出品 | 优快云(ID:优快云news)1995 年,Sun Microsystem 公司发布了 Java 程序设计语言,为开发现代多媒体应用程序提供了一种更加可移植和交互的方式。从那时起,Java 便成为主流的编程语言之一,被应用于各行各业,也有着“一次编写,到处运行”的优势特性。近日,为揭晓 Java 生态系统的最新发展状况,分析公司 New Relic 在调研了新版本、容器...

优快云资讯 8716
上一篇: 在 Eclipse 中使用不同的原型 Maven archetype 创建出来的项目有什么区别?
下一篇: 获取系统中的所有字体并使用Java Swing 显示在界面中
莱迪娜的风声
博客等级 码龄11年 5粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莱迪娜的风声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值