Java主流版本

最近java推出了最新的版本21,于 2023 年 9 月 19 日全面发布,与之前的 Java 17 一样,Java 21 是一个长期支持 (LTS) 版本;它会持续很长一段时间。

借此机会提出我比较熟悉的java8和java17,以及用他们来于21做比较。

在这里提一嘴,银行系统用的是java8,因为银行系统通常很复杂,包含许多可移动的部分。稳定性是金融应用的基本要求。因此,编程语言在必要的时候提供全面的支持是很重要的。并且银行对每一分钱 的流水,支出和收入都看的很重要,升级版本会带来不必要的麻烦。

以下是Java 8的一些新特性:

  1. Lambda表达式:Lambda表达式是Java 8最重要的特性之一。它允许我们以更简洁的方式编写函数式代码。Lambda表达式使得在集合中进行遍历、过滤和映射等操作变得更加容易。

  2. 函数式接口:Java 8引入了函数式接口概念,即只有一个抽象方法的接口。函数式接口可以与Lambda表达式一起使用,进一步促进函数式编程的实践。

  3. 流(Stream) API:流API是Java 8中引入的一个全新的API。它提供了一种更简洁、更可读的方式来处理集合数据。使用流API可以进行集合的过滤、映射、排序等操作。

  4. 默认方法:Java 8允许在接口中定义默认方法。默认方法是接口中带有实现的方法,可以在不破坏已有实现的情况下,向接口中添加新的方法。

  5. 方法引用:方法引用是一种更简洁的Lambda表达式的语法。它允许我们直接引用现有的方法作为Lambda表达式的实现。

  6. Optional类:Optional类是一种用于处理可能为空的值的类。它提供了一些方法来避免空指针异常,并编写更可靠的代码。

  7. 新的日期和时间API:Java 8引入了新的日期和时间API,提供了一种更好的方式来处理日期、时间和时间间隔。新的API更加清晰、简单,并且线程安全

Java17的特性: 

提供更简单的许可证

甲骨文将从 Oracle JDK 17 发行版开始提供免费使用的许可证,并在下一个 LTS 版本发布之后继续提供整整一年。同时,甲骨文也将延续自 2017 年以来的做法,继续根据开源通用公共许可证 (GPL) 发布 Oracle OpenJDK 发行版。

增强对客户的长期支持

甲骨文与 Java 开发人员社区和 JCP 合力优化 LTS 计划,如果组织希望迁移到较新的 Java LTS 版本,他们将拥有更大的灵活性,并且可以更好地掌控时间。下一个 LTS 版本将会是 Java 21,将于 2023 年 9 月推出,LTS 版本的发布周期将从现有的三年缩短至两年。

Oracle LTS 和 Java SE 订阅的客户可以按自身计划迁移到 Java 17。甲骨文将为客户提供 Java 17 的安全、性能和错误修复更新,至少到 2029 年 9 月。

甲骨文 Java 平台组开发副总裁 Georges Saab 表示:“在过去的三年里,许多开发人员都很喜欢这些新功能,我们看到生态系统真正适应了每六个月一次的发布节奏。Java 开发人员目前面临的一大挑战是,他们的组织只允许使用最新的 LTS 版本。现在,LTS 版本将改为每两年发布一次,组织较为保守的开发人员也可以选择和访问他们喜欢和想要使用的功能。”

IDC 软件开发研究副总裁 Arnal Dayaratna 表示:“甲骨文正在做出改变,不仅将长期支持版本的发布周期改为两年,同时新推出的许可证也更宽松,延长了生产环境的 Oracle JDK 免费使用期限,让 Java 社区获益无穷。因此,组织可以更灵活地管理云、本地和混合环境中复杂的现代应用程序开发和部署。”

加快 Java 在云中的采用

Java 是一个成功的开发平台,以满足开发人员不断变化的需求为目标而持续进行创新。为了加速 Java 在云中的采用,甲骨文最近推出了 Oracle Java 管理服务 (Oracle Java Management Service),这是一项新的 Oracle 云基础设施 (OCI) 原生服务,可帮助组织在本地或任何云端管理 Java 运行时和应用程序。

Oracle Java 管理服务能够帮助客户了解整个企业中的Java部署,这涵盖了安装在企业环境中的所有 Java 版本,即在开发和生产中运行的 Java 版本。Oracle Java 管理服务能够突出显示任何未计划运行的 Java 应用,并检查所有已安装的 Java 版本是否安装了最新的安全补丁,确保版本时时更新。

JDK 17 增加了新的语言增强功能,对库进行更新,支持新款 Apple 计算机,移除和弃用旧功能,并且确保用户编写的 Java 代码在未来的 JDK 版本中可以继续正常工作。此外,JDK 17 还提供语言功能预览版和孵化阶段的 API,以收集来自 Java 社区的反馈。具体更新内容包括:

Java 语言增强功能

  • JEP 409:密封类 — 密封类和接口限制其他类或接口扩展或实现它们此增强功能是Project Amber的又一项改进,旨在通过发展 Java 语言来提高开发人员的生产力。

对库进行更新和优化

  • JEP 306恢复始终严格的浮点语义 — Java 编程语言和 Java 虚拟机最初只有严格的浮点语义,从 Java 1.2 开始,为了适应当时硬件架构的限制,曾默认允许这些严格语义中的细微变化。现在不再需要这些变化,已在 JEP 306 删除。
  • JEP 356增强型伪随机数生成器 — 增加伪随机数生成器 (PRNG) 的新接口类型和实现方法,提高了不同 PRNG 的互操作性,并且易于根据需求请求算法,而不是对特定实现进行硬编码。
  • JEP 382新的 macOS 渲染管道 — 通过使用新的 Apple Metal API 为 macOS 实现 Java 2D 渲染管道,减少了 JDK 对已弃用的 Apple OpenGL API 的依赖。

支持新平台

  • JEP 391macOS AArch64 端口 — 将 JDK 移植到 macOS/AArch64 平台,Java 应用可以原生运行于基于 Arm 64 的新 Apple Silicon 计算机。

移除和弃用

  • JEP 398弃用即将移除的 Applet API — 所有 Web 浏览器供应商正计划或已经停止支持 Java 浏览器插件。Applet API 已于 2017 年 9 月在 Java 9 中弃用,但并未移除。
  • JEP 407移除 RMI 激活 — 移除远程方法调用 (RMI) 激活机制,保留其他 RMI。
  • JEP 410移除实验性的 AOT  JIT 编译器 — 基于 Java 的提前 (AOT) 和即时 (JIT) 实验性编译器并未被广泛采用。作为一个选择性功能,AOT 和 JIT 编译器已在 JDK 16 中移除,本次在 JDK 源代码中移除。

面向未来的Java程序

  • JEP 403JDK 内部强封装 — 用户再也不能像在 JDK 9 到 JDK 16 中一样,通过单个命令行选项来放宽对内部元素的强封装。用户仍然可以访问现有的内部 API ,但需要以命令行参数形式或 JAR 文件清单属性进行枚举,且每个包应该放宽封装。此更改将使应用程序更安全,并减少对非标准、内部 JDK 实现细节的依赖。

未来JDK发行版的预览版和孵化器

  • JEP 406Switch 模式匹配(预览版)— 允许Switch表达式针对多个模式进行测试,每个模式都有特定的操作,从而简洁、安全地表达面向数据的复杂查询。
  • JEP 412外部函数和内存 API(孵化阶段)— 改进 JDK 14 和 JDK 15 中引入的孵化 API,让 Java 程序与 Java 运行时之外的代码和数据进行互操作。通过有效调用外部函数(即 JVM 之外的代码),以及安全地访问外部内存,这些 API 可以调用本地库和处理本地数据,并且不受 Java 本机接口 (Java Native Interface, JNI) 的脆弱性和复杂性影响。这些 API 正在Project Panama中开发,目的是改进 Java 和非 Java 代码之间的交互性。
  • JEP 414:矢量 API(二次孵化阶段)— 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的最佳向量指令的方式表达向量计算,从而实现优于等效标量计算的性能。
  • JEP 414:矢量 API(二次孵化阶段)— 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的最佳向量指令的方式表达向量计算,从而实现优于等效标量计算的性能。



    java21有什么亮点

  • DK 21 新特性说明 正式稳定功能 JEP 431:序列集合

    序列集合(Sequenced Collections)在 core-libs/java.util:collections 包中。

    该 JEP 提议引入“一个新的接口族,用于表示集合的概念,这些集合的元素按照预定义的序列或顺序排列,它们是作为集合的结构属性。”这一提案的动机是由于集合框架中缺乏预定义的顺序和统一的操作集。

    JEP 439:分代 ZGC

    分代 ZGC(Generational ZGC)在 hotspot/gc 包中。

    通过扩展Z垃圾回收器(ZGC)来维护年轻对象和年老对象的独立生成,从而提高应用程序性能。这将使ZGC能够更频繁地收集年轻对象——这些对象往往英年早逝。

    JEP 440:记录模式

    使用记录模式(Record Patterns)增强Java编程语言,以解构记录值。可以嵌套记录模式和类型模式,以实现功能强大、声明性和可组合形式的数据导航和处理。

    JEP 441:switch 模式匹配

    通过switch表达式和语句的模式匹配来增强Java编程语言。通过将模式匹配扩展到switch,可以针对多个模式测试表达式,每个模式都有一个特定的操作,从而可以简洁、安全地表达复杂的面向数据的查询。

    JEP 444:虚拟线程

    将虚拟线程(Virtual Threads)引入Java平台。虚拟线程是轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。

    详见《Java下一代高并发技术——虚拟线程(Virtual Threads)》。

    JEP 449:弃用 Windows 32 位 x86 移植

    弃用Windows 32位x86移植,并打算在将来的版本中将其删除。

    JEP 451:准备禁止动态加载代理

    将代理动态加载到正在运行的JVM中时发出警告。这些警告旨在让用户为将来的版本做好准备,该版本默认情况下不允许动态加载代理,以提高默认情况下的完整性。在启动时加载代理的可服务性工具不会导致在任何版本中发出警告。

    JEP 452:密钥封装机制 API

    介绍一种用于密钥封装机制(Key Encapsulation Mechanism,简称KEM)的API,这是一种使用公钥加密来保护对称密钥的加密技术。

    预览阶段功能 JEP 430:字符串模板(预览)

    使用字符串模板(String Templates)增强Java编程语言。字符串模板通过将文本与嵌入的表达式和模板处理器耦合来生成专门的结果,从而补充Java现有的字符串文本和文本块。这是一个预览语言功能和API。

    JEP 442:外部函数和内存 API(第三次预览)

    引入API,Java程序可以通过该API与Java运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码),并通过安全地访问外部内存(即不受JVM管理的内存),API使Java程序能够调用本机库并处理本机数据,而不会出现JNI的脆弱性和危险性。这是一个预览API。

    JEP 443:未命名模式和变量(预览)

    使用未命名模式和未命名变量来增强Java语言,未命名模式匹配记录组件而不说明组件的名称或类型,未命名变量可以初始化但不使用。两者都用下划线字符_表示。这是一个预览语言功能。

    JEP 445:未命名类和实例主方法(预览)

    发展Java语言,使学生无需理解为大型程序设计的语言功能即可编写第一个程序。学生们不用使用单独的Java方言,就可以为单类程序编写精简的声明,然后随着技能的发展,无缝地扩展程序,使用更高级的功能。这是一个预览语言功能。

    JEP 446:作用域值(预览)

    引入作用域值,这些值可以在不使用方法参数的情况下安全有效地共享给方法。它们优先于线程化局部变量,尤其是在使用大量虚拟线程时。这是一个预览API。

    实际上,作用域值是一个隐式方法参数。这“就好像”一系列调用中的每个方法都有一个额外的、不可见的参数。没有任何方法声明此参数,只有能够访问作用域值对象的方法才能访问其值(数据)。通过作用域值,可以通过一系列中间方法将数据从调用者安全地传递给遥远的被调用者,这些中间方法不声明数据的参数,也无法访问数据。

    JEP 453:结构化并发(预览)

    通过引入用于结构化并发(Structured Concurrency)的API来简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和消除,提高可靠性,并增强可观察性。这是一个预览API。

    孵化阶段功能 JEP 448:Vector API(孵化器第六阶段)

    引入API来表示向量计算,这些向量计算在运行时可靠地编译为支持的CPU架构上的最佳向量指令,从而实现优于等效标量计算的性能。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值