看到 Java 12 的这些更新,你还坚持使用老版本吗?

Posted Cloud云说

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了看到 Java 12 的这些更新,你还坚持使用老版本吗?相关的知识,希望对你有一定的参考价值。

按照发布周期,Java 12 于今年 3 月发布。3 月 19 日,Java 12 如期而至。


Java 12 虽然不是主要版本,但作为短期支持版本,它也带来了 8 个更新:


Java 12 的 8 大更新


189:Shenandoah:低暂停时间垃圾收集器(实验性)


添加一个名为 Shenandoah 的新垃圾收集(GC)算法,通过与正在运行的 Java 线程同时进行疏散工作来减少 GC 暂停时间。使用 Shenandoah 的暂停时间与堆大小无关,这意味着无论堆是 200 MB 还是 200 GB,您都将具有相同的一致暂停时间。


230:Microbenchmark Suite


为 JDK 源代码添加基本的微基准测试套件,使开发人员可以轻松运行现有的微基准测试并创建新的基准测试。


325:switch 表达式


使用 Java 12,switch 不仅可以作为语句也可以作为表达式。无论作为语句或者作为表达式,switch 都可以使用传统/简化的作用域和控制流行为。 这将有助于简化代码,并为在 switch 中使用模式匹配铺平道路。

Java 开发人员正在增强 Java 编程语言,以使用模式匹配来解决当前 switch 语句的几个问题。 这包括:switch 块的默认控制流行为,switch 块默认作用域(被视为单个作用域的块)和 switch 仅作为语句。

在 Java 11中,switch语句追随C和C++,默认情况下使用fall-through语义。 虽然传统的控制流程在编写低级代码时很有用,但随着switch在更高级别的环境中采用,易出错会盖过其灵活性。


Java 11


Java 12


334:JVM 常量 API 


JEP 334 引入了一个API,用于建模关键类文件和运行时artifacts,例如常量池。此 API 将包括 ClassDesc、MethodTypeDesc、MethodHandleDesc 和 DynamicConstantDesc 等类。此 API 对于操作类和方法的工具很有帮助。


340:一个 AArch64 端口,而不是两个 


Java 12 将只有一个 ARM 64 位实现(aarch64)。目标是删除所有与 arm64 实现相关的代码,同时保留 32 位 ARM 端口和 64 位 aarch64 实现。

这将把重点转移到单个64位ARM实现,并消除维护两个实现所需的重复工作。 当前的JDK 11实现中有两个64位ARM实现。


341:默认 CDS 存档 


通过在 64 位平台上的默认类列表的帮助下生成 CDS 归档来改进 JDK 构建过程,从而有效地消除了运行 java -Xshare:dump。


此功能的目标包括:改进开箱即用的启动时间、摆脱使用 -Xshare:dump。


344:G1 的可中止混合收集


此功能通过将 Mixed GC 集拆分为强制部分和可选部分,使 G1 垃圾收集器更有效地中止垃圾收集过程。通过允许垃圾收集过程优先处理强制集,G1 可以更多满足满足暂停时间目标。

G1 是一个垃圾收集器,设计用于具有大量内存的多处理器机器。由于它提高了性能效率,G1 垃圾收集器最终将取代 cms 垃圾收集器。

G1 垃圾收集器的主要目标之一是满足用户设置的暂停时间。G1 采用一个分析引擎来选择在收集期间要处理的工作量。此选择过程的结果是一组称为GC集的区域。一旦 GC 集建立并且 GC 已经开始,那么 G1 就无法停止。

如果 G1 发现 GC 集选择选择了错误的区域,它会将 GC 区域的拆分为两部分(强制部分和可选部分)来切换到处理 Mix GC 的增量模式。如果未达到暂停时间目标,则停止对可选部分的垃圾收集。


346:从 G1 中归还未使用的已提交内存


此功能的主要目标是改进 G1 垃圾收集器,以便在不活动时将 Java 堆内存归还给操作系统。为实现此目标,G1 将在低应用程序活动期间定期生成或持续循环检查完整的 Java 堆使用情况。

这将立即归还未使用的部分 Java 堆内存给操作系统。用户可以选择执行 FULL GC 以最大化返回的内存量。


据了解,在JDK 12中标记为已修复的 1919 个 JIRA 问题中,Oracle 完成了其中 75%(1433 个)问题,Red Hat、Google、SAP、BellSoft、IBM、阿里巴巴、华为等修复了 25% 的问题。


但是,尽管 Java 12 已经发布,Java 8 仍然是拥趸者最多的版本。在很多人看来,Java 8 是 Java 5 之后最重要的版本,包含语言、编译器、库、工具和 JVM 等多方面的新特性。因而,在得知 Java 12 发布的消息后,不少用户表示「坚持使用 Java 8」。


值得注意的是,Oracle 在 2019 年 1 月之后,不再提供免费的商业版本更新,届时想要继续获得 Oracle 的商业支持和维护,需付费订阅;对 Java 8 的官方支持时间持续到 2020 年 12 月,之后将不再为个人桌面用户提供 Oracle JDK 8 的修复更新。


Java 12 来了,Java 13 也在路上了。你是跟着新版本的节奏,还是一如既往保持对 Java 8 的热爱?


推荐阅读




以上是关于看到 Java 12 的这些更新,你还坚持使用老版本吗?的主要内容,如果未能解决你的问题,请参考以下文章

宝,你还在坚持吗

可怕的是比你牛的人比你还努力

我应该采用 Java 12 还是坚持使用 Java 11?

现在该用 Java12,还是坚持使用老版本?

我该用 Java 12 还是坚持 Java 11?

Java 实习生每日面试题打卡——ThreadLocal源码夺命12问,你能坚持到第几问?