当前位置:   article > 正文

java jdk12_JDK 12:Java 12中的新功能

java12

java jdk12

基于Java SE(标准版)12的Java开发套件12的生产版本现已发布。 Oracle可以为Linux,Windows和MacOS提供JDK 12构建。

[ Java JDK 11中所有重要的新功能 15个Java框架,可为开发人员提供帮助 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

哪里可以下载JDK 12

您可以从Java.net网站下载JDK 12

开源构建是根据GNU通用公共许可证v2提供的,带有Classpath Exception。 在非开放源代码许可下,可以在Oracle技术网络上找到来自Oracle的JDK 12商业版本。

Java 12的新功能

雪兰多亚垃圾收集器

Java 12添加了Shenandoah(一种实验性垃圾收集算法) ,通过在运行Java线程的同时执行疏散工作来减少垃圾收集暂停时间。 Shenandoah为重视响应能力和可预测的短暂停顿的应用程序提供了合适的算法。 但是,其目的不是解决所有JVM暂停问题。

红帽公司目前在Aarch64和AMD64架构上支持Shenandoah。

G1垃圾收集器的可中止混合收集

如果Java 1混合集合可能超出暂停目标,则Java 12将使其中止。 G1的目标是达到用户为其收集暂停提供的暂停时间目标。

以前,高级分析引擎选择了收集期间要完成的工作量。 结果是一组称为集合集的区域。 确定集合并开始收集后,G1会立即收集所有区域中所有区域中的所有活动对象。 但是,如果应用程序的启发式方法选择的集合集太大,则可能导致G1超过暂停时间目标。

需要一种机制来检测启发式方法何时重复选择了不正确的工作量来进行收集,如果发生这种情况,则让G1分步执行增量工作,其中收集可以在每个步骤之后中止。 Java 12中引入的机制使G1可以更频繁地满足暂停时间目标。

Swift返回未使用的已提交内存

Java 12增强了G1,可以在空闲时自动将Java堆内存返回给操作系统。 当应用程序活动非常少时,将在合理的时间内释放此内存。

以前,G1仅在完全垃圾回收或并发周期中从堆返回内存。 由于G1试图避免完全垃圾回收,仅基于堆占用和分配活动触发并发周期,因此在许多情况下,除非被迫在外部这样做,否则它不会返回堆内存。 在通过使用付费资源的容器环境中,此行为是不利的。 即使当JVM由于不活动而仅使用其分配的内存的一小部分时,G1仍保留了整个堆。 因此,客户一直在为所有资源付费,而云提供商则无法充分利用其硬件。

使用Java 12,JVM可以检测堆未充分利用的阶段,并在此期间自动减少其堆使用情况。

JVM常数API

该API对密钥类文件和运行时工件的名义描述进行建模,尤其是可从常量池中加载的常量。 Java 12在新包java.lang.invoke.constant定义了一系列基于值的符号引用类型,以描述每种可加载常量。

常量池存在于每个Java类中,并在该类中存储操作数和字节码指令。 常量池中的条目描述了运行时工件(例如类和方法)或简单值(例如字符串和整数)。 这些条目称为可加载常量。

操纵类文件的程序必须对字节码指令进行建模,然后对可加载常量进行建模。 但是,使用标准Java类型对可加载常量进行建模是不够的。 对于描述字符串的可加载常量,这可能是可以接受的,但对于描述类的可加载常量,这是有问题的,因为生成“活动的” Class对象依赖于类加载的正确性和一致性。 但是,类加载具有许多环境依赖性和故障模式。

因此,处理可加载常量的程序如果可以操纵类和方法以及鲜为人知的工件(例如方法句柄和名义上象征形式的动态计算的常量),则可以简化。 因此,JVM常数API为库和工具提供了一种描述可加载常数的标准方法。

改进了启动,CDS和垃圾收集

Java 12增强了JDK构建过程,以在64位平台上使用默认类列表生成默认类数据共享(CDS)存档。 这可以缩短开箱即用的启动时间,并且无需运行-Xshare:dump即可从CDS中受益。 链接映像后,已将JDK构建过程修改为运行java-xshare:dump

包括了其他命令行选项,以微调垃圾回收堆时间,以改善常见情况下的内存布局。 具有更高级要求的用户,例如包含应用程序类和不同垃圾收集配置的自定义类列表,仍然能够创建自定义CDS存档。

减少了ARM端口数量

Java 12删除了所有与arm64端口相关的源,同时保留了32位ARM和64位aarch64 。 删除此端口将使贡献者将精力放在单个64位ARM实施上,并消除维护两个端口可能导致的重复工作。 当前,JDK中有两个64位ARM端口。

切换表达式

开关表达式通过扩展switch语句简化了编码,因此它既可以用作语句也可以用作表达式。 这使语句和表达式都可以使用“传统的”或“简化的”作用域,并控制流的行为。 这些更改导致更简单的“日常”编码,并为在switch使用模式匹配提供了方法。

随着Java构建者开始支持模式匹配,Java switch语句的不规则性已成为障碍。 这些包括开关块的默认控制流行为; 切换块的默认作用域,其中该块被视为一个单一作用域; 并仅以声明的方式进行切换。 Java的switch语句的当前设计紧密遵循诸如C ++之类的语言,并且默认情况下支持fallthrough语义。 此控制流对于编写低级代码很有用。 但是,当在较高级别的上下文中使用switch时,其容易出错的性质开始超过灵活性。

基本基准套件

JDK 12包括基本的微基准套件,已将其添加到平台的源代码中。 目的是使开发人员更容易运行现有基准或建立新基准。

Microbenchmarks套件提案于2014年7月创建,并于2018年11月初进行了更新,由Java Microbenchmark Harness (JMH)支持,用于构建用Java和其他JVM语言编写的基准。 该套件与JDK源代码位于同一目录中,开发人员可以轻松添加新的基准测试。

为新的JDK功能提供基准或创建涵盖JDK中所有内容的完整基准不是目标。 还要注意,常规JDK构建不需要基准测试套件,它是一个单独的构建目标。

该提案要求在wiki.openjdk.java.net上创建一个新页面,以解释如何开发基准测试和描述需求。 这些要求将要求遵守编码标准,可复制的性能和文档。

JDK 12更新

计划要求JDK 12在六个月内获得JDK 13的成功之前接受两次更新。 JDK 12是2017年9月JDK 9引入的Oracle六个月发行计划的一部分。 与JDK 11不同,JDK 12是一个功能版本,而JDK 11是一个长期支持版本,已计划了数年的支持。

翻译自: https://www.infoworld.com/article/3301197/jdk-12-the-new-features-in-java-12.html

java jdk12

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53844?site
推荐阅读
相关标签
  

闽ICP备14008679号