Java12是一个主要功能版本,它为JAVA带来了许多特定于语言的更改。它遵循Java发布日程推出,并于2019年3月发布,距 Java11发布仅六个月。
Java12是一个非LTS版本。
8个JEP
Java12总共有8个新的JEP(JDK Enhancement Proposals):
- 189:Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
- 230:Microbenchmark Suite
- 325:Switch Expressions (Preview)
- 334:JVM Constants API
- 340:One AArch64 Port, Not Two
- 341:Default CDS Archives
- 344:Abortable Mixed Collections for G1
- 346:Promptly Return Unused Committed Memory from G1
官网地址:https://openjdk.org/projects/jdk/12/
特性介绍
Shenandoah GC(垃圾收集器):
Shenandoah是Java12引入的一种新的垃圾收集算法,设计目标是保证低延迟,可以将暂停时间控制在10毫秒以内。
Shenandoah的特点在于,它可以在整个堆上同时进行垃圾收集,无需在单独的年轻代和老年代之间划分内存。此外,Shenandoah的暂停时间与堆大小无关,意味着无论堆的大小如何,它都能提供稳定的暂停时间。
微基准测试套件:
JDK源码中新增了一套微基准测试套件,使开发人员能够轻松运行现有的微基准测试,并创建新的基准测试。这一功能有助于开发人员对代码性能进行更精确的测量和优化。
该套件基于Java微基准套件(JMH),用于测量和优化Java代码的性能。
改进的Switch语句和Switch表达式:
Java12对Switch语句进行了增强,使其支持更多的数据类型,而不再仅限于常量表达式。
引入了Switch表达式(预览版),允许Switch不仅作为语句使用,还可以作为表达式返回一个值。这种新的语法使得在Switch语句中返回一个值变得更加简洁和方便。
int number = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
case THURSDAY, SATURDAY -> 8;
case WEDNESDAY -> 9;
default -> throw new IllegalStateException("Invalid day: " + day);
};
JVM常量池的新的API
Java12增加了新的API,用于在JVM常量池中进行低级别的操作。这对于一些高级开发和工具开发者来说非常有用。
新的JVM常量API提供了一种模型来描述类文件中的常量池,并提供了对这些常量的访问和操作功能。
One AArch64 Port, Not Two
合并了两个AArch64端口(arm64和aarch64),只保留了一个,从而简化了代码库和维护。
现状:当前Java11及之前版本JDK中存在两个64位ARM端口。这些文件的主要来源位于src/hotspot/cpu/arm
和open/src/hotspot/cpw/aarch64
目录中。尽管两个端口都产生了aarch64实现,我们将前者(由oracle贡献)称为arm64,将后者称为aarch64
新特征:Java12中将删除由0racle提供的arm64端口相关的所有源码,即删除目录open/src/hotspot/cpu/arm
中关于64-bit的这套实现,只保留其中有关32-bit ARM端口的实现,余下目录的open/sre/hotspot/cpw/aarch64
代码部分就成了 AArch64的默认实现。
目的:这将使开发贡献者将他们的精力集中在单个64位ARM实现上,并消除维护两套实现所需的重复工作。
Default CDS Archives
类数据共享(CDS)功能默认启用,提升了JVM的启动时间和内存占用。CDS通过共享常用类的内存映像来实现这一点。
我们知道在同一个物理机/虚拟机上启动多个M时,如果每个虚拟机都单独装载自己需要的所有类,启动成本和内存占用是比较高的。所以Java团队引入了类数据共享机制(class Data sharing,简称 cDS)的概念,通过把一些核心类在每个JVM间共享,每个M只需要装载自己的应用类即可。
好处是:启动时间减少了,另外核心类是共享的,所以JvM的内存占用也减少了。
Promptly Return Unused Committed Memory from G1
改进了G1垃圾收集器,使其能够更快地返回未使用的已提交内存,从而更高效地管理内存。
Abortable Mixed Collections for G1
G1垃圾收集器引入了可中止的混合收集,以减少垃圾收集暂停时间。