JDK 12 于 美国当地 2019年3月19日发布 .GPL下的生产就绪的jar 可从Oracle下载 ; 其他供应商的JAR 包 很快就会出现。
该版本的功能和时间表是通过JEP流程提出和跟踪的,并由JEP 2.0提案进行了修订 。使用JDK Release Process(JEP 3)生成发布。
、
我们看看本次个更新了那些特性?
189: | Shenandoah:低暂停时间垃圾收集器(实验性) |
---|---|
230: | Microbenchmark |
325: | 切换表达式(预览) |
334: | JVM常量API |
340: | 一个AArch64端口,而不是两个 |
341: | 默认CDS档案 |
344: | G1的可流动混合收集 |
346: | 从G1中立即返回未使用的已提交内存 |
示例:Switch可支持如下写法:
代码语言:javascript复制// 例如支持这么写:
switch (day) {
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}
扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并控制执行流。这些更改将简化日常编码工作,并为 switch 中的模式匹配(JEP 305)做好准备。
Java 11
Java 12
2 默认CDS归档
通过在64位平台上的默认类列表的帮助下生成CDS归档来改进JDK构建过程,从而有效地消除了运行java -Xshare:dump。此功能的目标包括:1。)改进开箱即用的启动时间,以及2.)摆脱使用-Xshare:dump。
3 Shenandoah GC
Shenandoah是一种垃圾收集(GC)算法,旨在保证低延迟(10 - 500 ms的下限)。它通过在运行Java工作线程的同时执行GC操作减少GC暂停时间。使用Shenandoah,暂停时间不依赖于堆的大小。这意味着无论堆的大小如何,暂停时间都是差不多的。
这是一个实验性功能,不包含在默认(Oracle)的OpenJDK版本中。
4 JMH 基准测试
此功能为JDK源代码添加了一套微基准测试(大约100个),简化了现有微基准测试的运行和新基准测试的创建过程。它基于Java Microbenchmark Harness(JMH)并支持JMH更新。
此功能使开发人员可以轻松运行当前的微基准测试并为JDK源代码添加新的微基准测试。可以基于Java Microbenchmark Harness(JMH)轻松测试JDK性能。它将支持JMH更新,并在套件中包含一组(约100个)基准测试。
5 JVM 常量 API
JEP 334引入了一个API,用于建模关键类文件和运行时artifacts,例如常量池。此API将包括ClassDesc,MethodTypeDesc,MethodHandleDesc和DynamicConstantDesc等类。此 API 对于操作类和方法的工具很有帮助。
6 G1的可中断 mixed GC
此功能通过将Mixed GC集拆分为强制部分和可选部分,使G1垃圾收集器更有效地中止垃圾收集过程。通过允许垃圾收集过程优先处理强制集,g1可以更多满足满足暂停时间目标。
G1是一个垃圾收集器,设计用于具有大量内存的多处理器机器。由于它提高了性能效率,g1垃圾收集器最终将取代cms垃圾收集器。
G1垃圾收集器的主要目标之一是满足用户设置的暂停时间。G1采用一个分析引擎来选择在收集期间要处理的工作量。此选择过程的结果是一组称为GC集的区域。一旦GC集建立并且GC已经开始,那么G1就无法停止。
如果G1发现GC集选择选择了错误的区域,它会将GC区域的拆分为两部分(强制部分和可选部分)来切换到处理Mix GC的增量模式。如果未达到暂停时间目标,则停止对可选部分的垃圾收集。
7 G1归还不使用的内存
此功能的主要目标是改进G1垃圾收集器,以便在不活动时将Java堆内存归还给操作系统。为实现此目标,G1将在低应用程序活动期间定期生成或持续循环检查完整的Java堆使用情况。
这将立即归还未使用的部分Java堆内存给操作系统。用户可以选择执行FULL GC以最大化返回的内存量。
8 移除多余ARM64实现
Java 12将只有一个ARM 64位实现(aarch64)。目标是删除所有与arm64实现相关的代码,同时保留32位ARM端口和64位aarch64实现。
这将把重点转移到单个64位ARM实现,并消除维护两个实现所需的重复工作。当前的JDK 11实现中有两个64位ARM实现。
观望 JDK 13
根据 JDK 13 的迭代计划,预计其将于 2019 年 9 月发布 —— Java 现在采取“半年发布一次版本”的模式。
对于 JDK 13 的新特性,Oracle Java 平台组首席架构师 Mark Reinhold 做出了两个预测:
- 原生字符串文字(Raw String Literals),它可以跨多行源码而不对转义字符进行转义。目标是简化 Java 的开发,比如开发者可以可读形式表示字符序列,而不会掺杂一些 Java 指示符,或者提供针对 Java 以外的语法的字符串。在 JDK 13 中进行预期的测试运行后,该功能可以在随后的 JDK 14 版本中跟进。
- 可用于生产环境的 switch 表达式,JDK 13 中将带来一个 beta 版本实现。switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并控制执行流。这些更改将简化日常编码工作,并为 switch 中的模式匹配(JEP 305)做好准备。
Java 依然是2019年 最值得学习的编程语言
2018,github 新发布了2018年度全球最流行编程语言排行榜,
TypeScript 现在是所有地区最常用的十大语言之一,GitHub贡献者来自私有,公共和开源存储库。Java依然稳居第二名。毫无疑问,Java 依然是2019年最值得学习的编程语言。
更新有点快,我自己还在用8,问题不大。流水的语言,铁打的C , 我个人认为:Java的强大足够让你在以后的工作中保持较好的竞争力
END
选择”开发者技术前线 “星标?,内容一触即达。 开发者技术前线 汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。