当前位置: 首页 > 科技观察

JDK16:您需要了解的有关Java16的新功能

时间:2023-03-12 05:30:58 科技观察

可以在jdk.java.net上找到适用于Linux、Windows和MacOS的JDK16的早期版本。与JDK15一样,JDK16将是一个短期版本,支持六个月。JDK17将于2021年9月发布,将是一个长期支持(LTS)版本,将提供数年的支持。当前的LTS版本JDK11于2018年9月发布。JDK16将作为标准Java版本的参考实现,将于明年3月到货。截至10月8日,有八项提案正式针对JDK16。Java16中的新特性包括:将ZGC(Z垃圾收集器)线程堆栈处理从安全点迁移到并发阶段。该计划的目标包括从ZGC安全点中删除线程堆栈处理。使堆栈处理变得惰性、协作、并发和增量;从ZGC安全点中删除所有其他每线程根处理;并为其他HotSpotVM子系统提供延迟处理堆栈的机制。通过这种方式,ZGC使HotSpot中的GC暂停和可扩展性问题成为过去。到目前为止,随堆大小和元空间大小缩放的GC操作已从安全点操作移出并进入并发阶段。这些包括标记、重定位、引用处理、类卸载和大多数根处理。GC安全点中仍在进行的唯一活动是根处理和时间限制的标记终止操作的子集。这些根包括Java线程堆栈和其他线程根,这是有问题的,因为它们随着线程数量的增长而扩展。为了超越当前的情况,必须将每线程处理(包括堆栈扫描)转移到并发阶段。使用此计划,改进延迟的吞吐量成本应该可以忽略不计,并且在典型计算机上的ZGC安全点内应该花费不到一毫秒。弹性元空间能力,将未使用的HotSpotVM类元数据(元空间)内存更快地返回给操作系统,减少元空间占用空间并简化元空间代码以降低维护成本。Metaspace有很多堆外内存使用问题。该计划要求用基于伙伴的分配方案替换现有的内存分配器,提供一种将内存划分为多个分区以满足内存请求的算法。这种方法被用在像Linux内核这样的地方,它将以更小的块分配内存以减少类加载器的开销变得切实可行。碎片化也会减少。此外,从操作系统到内存管理域的内存承诺将根据需要延迟执行,从而减少从大阶段开始但不立即使用它们或可能没有完全使用它们的加载程序的占用空间。为了充分利用伙伴分配提供的弹性,元空间内存被安排成统一大小的颗粒,这些颗粒可以彼此独立地提交和取消提交。启用C++14语言功能以允许在JDKC++源代码中使用C++14功能,并提供有关可以在HotSpotVM代码中使用哪些功能的具体指导。在JDK15中,JDK中C++代码使用的语言功能已限制为C++98/03语言标准。在JDK11中,源代码已更新以支持使用更新版本的C++标准进行构建。这包括能够使用支持C++11/14语言功能的最新版本的编译器进行构建。本提案不建议对在HotSpot之外使用的C++代码进行样式或用法更改。但要利用C++语言功能,需要进行一些构建时更改,具体取决于平台编译器。用于孵化器阶段的矢量API,其中JDK将加载孵化器模块jdk.incubator.vector,以表达可以在支持的CPU架构上编译为最佳矢量硬件指令的矢量计算,以实现优于等效标量计算性能的性能.矢量API提供了一种在Java中编写复杂矢量算法的机制,该算法使用HotSpotVM中预先存在的矢量化支持,但具有使矢量化更可预测和更可靠的用户模型。该提案的目标包括提供一个清晰简洁的API来表达一系列矢量计算,通过支持多个CPU架构独立于平台,并在x64和AArch64架构上提供可靠的运行时编译和性能。优雅降级也是一个目标,将JDK移植到Windows/AArch64平台。随着新服务器类和消费类AArch64(ARM64)硬件的发布,Windows/AArch64因需求而成为一个重要的平台。虽然移植本身已基本完成,但此提案的重点是将移植集成到主线JDK存储库中。在x64和AArch64架构上,将JDK移植到AlpineLinux和其他使用musl作为其主要C库的Linux发行版。Musl是ISOC和Posix标准中描述的标准库函数的Linux实现。由于其镜像体积小,AlpineLinux在云部署、微服务和容器环境中得到广泛采用。Linux的Docker镜像小于6MB。让Java在这样的设置中开箱即用,将允许Tomcat、Jetty、Spring和其他流行的框架在这??些环境中本地运行。通过使用jlink减小Java运行时的大小,用户可以创建更小的图像,这些图像专为运行特定应用程序而定制。OpenJDK源代码存储库从Mercurial迁移到Git。推动这一努力的是版本控制系统元数据的大小以及可用工具和托管方面的优势。迁移到GitHub,与从Mercurial迁移到Git相关,JDK16源代码存储库位于流行的代码共享站点上。MercurialJDK和JDK-sandbox向Git、GitHub和Skara的过渡已于9月5日完成,贡献现已开放。