前言
前面的文章,我们对Java9、Java10、Java11的特性进行了介绍,对应的文章如下
Java9新增特性
Java10新增特性
Java11新增特性
今天我们来介绍一下Java12版本的新增特性
版本介绍
Java 12是Java SE的第12个版本,于2019年3月19日发布。这个版本主要为了帮助开发人员更加高效的进行编程工作,提高Java的性能和稳定性,并增加新特性和API。
Java 12的维护时间主要分为两个阶段,公共更新阶段和维护更新阶段。
公共更新阶段为期6个月,在这个阶段中,Oracle提供安全更新、错误修复和增强功能更新,还向企业客户提供预览版本以测试新功能,并在下一个长期支持(LTS)版本中进行采纳。
维护更新阶段则针对企业客户,提供长期支持版本的错误修复和安全更新。
特性列表
Java 12的版本特性主要包括:
- Shenandoah垃圾收集器 :这是一种低延迟、高吞吐量的垃圾收集器,专为大型内存应用程序设计。它使用了一种名为IETF RMT(Improved Efficiency of Transport)协议的分布式预期缩短算法,以实现暂停时间的缩短。
- Switch表达式 :这个新功能使得编写Switch语句时更加简单和灵活。具体而言,Switch表达式允许每个Case分支都使用箭头操作符(->),以及省略break语句并返回一个值。
- JVM常量API :这个新功能引入了对关键类文件和运行时工件的建模,特别是可从常量池加载的常量。
- AArch64实现 :只保留了一个AArch64实现,删除了与arm64相关的所有源,同时保留了32位ARM实现和64位aarch64。
此外,Java 12还引入了微基准测试套件JDK源码,使开发人员可以轻松运行现有的微基准测试并创建新的基准测试。以上信息仅供参考,如有需要,建议咨询专业的技术人员。
代码示例
- Switch表达式:
public class SwitchExpressionExample {
public static void main(String[] args) {
int day = 2;
String dayName = switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
case 4 -> "Thursday";
case 5 -> "Friday";
case 6 -> "Saturday";
case 7 -> "Sunday";
default -> throw new IllegalStateException("Invalid day: " + day);
};
System.out.println(dayName);
}
}
这个例子中,我们使用Switch表达式来根据给定的天数返回相应的星期名称。在Switch表达式中,我们使用了箭头操作符(->)来将每个Case分支映射到一个值。在这个例子中,如果输入的天数不是1到7之间的整数,将会抛出一个异常。
拓展
Shenandoah垃圾回收器
Shenandoah是一个美国雪兰多大学(Shenandoah University)的名字,该大学成立于1875年,位于美国弗吉尼亚州。另外,Shenandoah也是一条小河的名称,因太有名,整个区域的国家公园也以“Shenandoah”命名。
Shenandoah是Oracle开发的另一个垃圾收集器,其目标是实现一种能在任何堆内存大小下都可以把垃圾收集的停顿时间限制在十毫秒以内的垃圾收集器。
Shenandoah采用了基于Region的内存布局,在标记阶段采用了并发标记,且在实现上使用了G1垃圾收集器的很多代码。因此,Shenandoah与G1有很多相同点。同时,Shenandoah也具有自己的一些特点,例如它不仅需要在并发标记阶段实现并发,还需要在标记清除阶段实现并发。
总的来说,Shenandoah是一种高效的垃圾回收器,有助于提高Java程序的性能和响应速度。
JVM垃圾回收器
垃圾回收器是Java虚拟机(JVM)中的一种自动内存管理机制,它的主要作用是自动追踪所有正在使用的对象,并标记为垃圾,然后释放这些对象所占用的内存空间。
垃圾回收器可以按照不同的方式进行分类,例如根据回收机制、回收范围、回收速度等。其中,根据回收机制可以分为标记-清除、复制、标记-整理和分代收集等;根据回收范围可分为全局回收和局部回收;根据回收速度可分为并发回收和停止-复制回收等。
常见的垃圾回收器包括Serial、Parallel、CMS和G1等。其中,Serial收集器是最基本的一种,它在进行垃圾回收时会暂停其他所有工作线程,因此也被称为“Stop The World”收集器;Parallel收集器则可以在多核CPU环境下并行进行垃圾回收,因此可以显著缩短垃圾回收停顿时间;CMS(Concurrent Mark Sweep)收集器则主要面向服务端应用,在并发环境下尽可能减少独占式垃圾回收的停顿;G1(Garbage-First)收集器则是面向服务端应用的垃圾收集器,它具备并行与并发、分代收集和空间整合等特点。
垃圾回收器的具体实现细节可能会因不同的JVM实现而有所不同,但它们的基本原理和目标是相同的:尽可能减少内存碎片和停顿时间,提高内存利用率和程序性能。