六个月飞得如此之快,是时候再次仔细研究一下即将发布的新JDK版本。 让我们满足Java 12及其向开发人员介绍的功能。
自甲骨文推出其6个月加速发布节奏以来已经有一段时间了,要跟上每个版本及其添加到表中的功能越来越难了。
从好的方面来说,这种快速的发布速度也意味着Java引入了许多新功能供我们利用。 这意味着我们需要一直关注以查看添加了哪些令人兴奋的功能。 现在该看一下Java 12的全部含义了。
Java 12的新功能
雪兰多厄:低暂停时间的垃圾收集器
此实验功能希望添加一个名为Shenandoah的新垃圾收集(GC)算法,该算法是为更喜欢响应性和可预测的短暂停顿的应用程序而设计的。
此功能引入了一种算法,该算法足够有效,以允许程序在可用内存中运行,但也进行了优化,以永不中断正在运行的程序超过几毫秒的时间。
Shenandoah算法通过与正在运行的Java线程同时进行疏散工作,将有助于减少GC暂停时间。 它以并发CPU周期和空间为代价来交换暂停时间,并且暂停时间与堆大小无关,这意味着无论堆是200 MB还是200 GB,您都将具有相同的一致暂停时间。
Oracle确实注意到这并不是要解决所有JVM暂停问题,因为这些问题可能是由于安全时间(TTSP)问题或什至是监视应用程序膨胀引起的。 对于这些情况,该算法将不相关。
切换表达式
该JEP旨在扩展switch语句; 多向分支语句,它提供了一种基于表达式的值将执行分派到代码内不同部分的简便方法。
当前处于预览模式的此扩展使我们能够将switch用作语句或表达式,以简化编码并为即将到来的另一个JEP(Pattern Matching for instanceof( 305 ))做准备。
为了理解其含义,Oracle共享了以下示例。 不必要的冗长和视觉上嘈杂的代码通常掩盖了难以调试的错误,其中丢失的break语句表明发生了意外掉线:
标记为“ case L->”的新开关标签将表示仅在标签匹配时才执行箭头右侧的代码。 因此,现在可以编写之前的代码:
G1改进
Java 12附带了2个对默认垃圾收集器G1的更新。 第一个标题为“ G1的可终止混合集合 ”有助于使G1混合集合(如果它们超过暂停目标)可中止。
当前,G1使用分析引擎来选择收集期间要完成的工作量,一旦确定了收集集并开始了收集,则G1必须收集收集集所有区域中的所有活动对象而不停止。 这导致垃圾收集器超出了暂停时间目标,这是JEP旨在解决的问题。
G1的另一个功能还着重于提高垃圾收集器的性能,特别是返回未使用的已提交内存。
当前版本的G1仅在完整GC或并发周期中从Java堆返回内存。 由于G1努力避免完全避免出现完整的GC,并且仅根据Java堆占用和分配活动触发并发周期,因此在许多情况下,除非强制从外部进行,否则它不会返回Java堆内存。
那就是“ 从G1Swift返回未使用的承诺内存 ”的地方,着重于通过在G1空闲时自动将Java堆内存返回到操作系统来增强垃圾收集器。
还有什么?
Java 12中引入的其他功能包括:
- Microbenchmark Suite –将微基准的基本套件添加到JDK源代码中,使开发人员可以轻松地运行现有的微基准并创建新的微基准。
- JVM常量API –引入了一个API,以对关键类文件和运行时工件的名义描述进行建模,例如可从常量池中加载的常量。 该API对于处理Java类和方法的工具很有用。
- 默认的CDS存档 -增强了JDK生成过程,以生成类数据共享(CDS)存档,并缩短了现成的启动时间。
这值得么?
通过不断的更新,我们看到了越来越多的功能引入该语言–但是开发人员对最近的更改有何感想? 在大型系统和企业中升级和实现新的语言功能并不总是那么容易,更不用说与遗留代码以及团队的本地技巧和黑客建立兼容性。
确实,当我们冷漠地审视最新的Java版本时,我们发现频繁发布并不意味着最新版本是最受欢迎的版本。 通过查看Google趋势,我们发现事实并非如此:
尽管Java 8是家族中“最古老”的成员,但不可否认的是它的流行程度。 Java 11正在受到关注,这可能是因为Java 11是最新的长期受支持的版本,而Java 12在列表的底部。 它是一个新版本,因此我们愿意给它一些时间,但是从当前状态来看,它似乎变化不大。
这是否意味着Oracle应该停止六个月的节奏? 好吧,不。 做出此决定是为了使Oracle能够比以前更快地发布“较小”的功能,从而帮助Java与市场上的其他语言保持一致。
如果您提出要求,那么此更改只会帮助Java保持其功能和流行性,无论是对于编程领域的年轻新手还是即将来临的开发人员和资深人员而言。 现在我们唯一的问题是……Java 13将引入什么,这些功能将如何改变我们的编码方式?
翻译自: https://www.javacodegeeks.com/2019/04/complete-guide-java-12-new-features.html