java16学习笔记

Java16是一个重要的特性发布,它为JAVA带来了许多JVM特定的更改和语言特定的更改。它遵循了自JavaJava10以来引入的Java发布步调,并于2021年3月发布,仅在Java15发布后的六个月内发布。

Java 16是一个非LTS版本。

338:Vector API (Incubator) 矢量API(孵化)
347:Enable C++14 Language Features 启用C++14语言功能
357:Migrate from Mercurial to Git 从Mercurial迁移到Git
369:Migrate to GitHub 迁移到GitHub
376:ZGC: Concurrent Thread-Stack Processing ZGC:并发线程堆栈处理
380:Unix-Domain Socket Channels Unix域套接字通道
386:Alpine Linux Port Alpine Linux端口
387:Elastic Metaspace 弹性元空间
388:Windows/AArch64 Port Windows/AArch64 Port
389:Foreign Linker API (Incubator) 外部链接商API(孵化)
390:Warnings for Value-Based Classes 基于值的类的警告
392:Packaging Tool 打包工具
393:Foreign-Memory Access API (Third Incubator) 外部内存访问API(第三次孵化)
394:Pattern Matching for instanceof 增强instanceof
395:Records 新增Record类
396:Strongly Encapsulate JDK Internals by Default 默认情况下严格封装JDK内部
397:Sealed Classes (Second Preview) 密封类(第二次预览)

JEP 338: Vector API (Incubator)

详情参阅java16学习笔记-Vector API

JEP 347: Enable C++14 Language Features

允许在JDK C++源代码中使用C++14语言功能,并就哪些功能可以在HotSpot代码中使用给出具体指导。

JEP 357: Migrate from Mercurial to Git

将OpenJDK社区的源代码库从Mercurial(hg)迁移到Git

JEP 369: Migrate to GitHub

在GitHub上托管OpenJDK社区的Git存储库。结合JEP 357Migrate from Mercurial to Git,这将把所有单一存储库OpenJDK项目迁移到GitHub,包括JDK功能版本和JDK 11及更高版本的更新版本。

JEP 376: ZGC: Concurrent Thread-Stack Processing

将ZGC线程堆栈处理从安全点转移到并发阶段。

Z垃圾收集器目标是解决JVM中的GC暂停和可扩展性问题。目前我们已经将所有随堆大小和元空间大小而扩展的GC操作,从安全点操作转移到并发阶段。这些包括标记、重定位、引用处理、类卸载和大多数根处理。
在GC安全点中仍然完成的唯一活动是根处理的一个子集和有时间限制的标记终止操作。根包括Java线程堆栈和各种其他线程根。这些根是有问题的,因为它们会随着线程的数量而扩展。大型机器上有许多线程,根处理成为一个问题。
为了超越我们今天所拥有的,并满足在GC安全点内花费的时间不超过一毫秒的期望,即使在大型机器上,我们也必须将每个线程的处理(包括堆栈扫描)转移到并发阶段。
在这项工作之后,ZGC安全点操作内部基本上不会做任何有意义的事情。
作为该项目的一部分构建的基础设施最终可能会被其他项目(如Loom和JFR)使用,以统一延迟堆栈处理。

JEP 380: Unix-Domain Socket Channels

对于本地,过程间通信,UNIX域插座比TCP/IP环回连接更安全,更有效。

  • UNIX域插座严格用于同一系统上的过程之间的通信。不打算接受远程连接的应用程序可以通过使用Unix-Domain插座来提高安全性。

  • Unix域插座受到强制执行的基于文件系统的访问控件的操作系统进一步保护。

  • 与TCP/IP环回连接相比,Unix-Domain插座具有更快的设置时间和更高的数据吞吐量。

  • 对于容器环境的TCP/IP套件,Unix-Domain插座可能是更好的解决方案,在该容器环境中,需要同一系统上的容器之间的通信。这可以使用位于共享量的插座来实现。

Unix-Domain插座长期以来一直是大多数UNIX平台的功能,现在在Windows 10和Windows Server 2019中得到支持。

为了支持Unix-Domain插座通道,我们将添加以下API元素:

  • 一个新的插座地址类java.net.UnixDomainSocketAddress

  • UNIX现有枚举的恒定值java.net.StandardProtocolFamily

  • 新的open工厂方法SocketChannelServerSocketChannel指定协议家族

  • 更新到 SocketChannel规格ServerSocketChannel,以指定通向UNIX域插座行为的渠道。

JEP 386: Alpine Linux Port

将JDK移至Alpine Linux,以及其他使用MUSL作为主要C库的Linux发行版,都可以在X64和AARCH64架构上。

JEP 387: Elastic Metaspace

更及时地将未使用的HotSpot类元数据(即元空间)内存还给操作系统,减少元空间的占用,并简化元空间代码,以降低维护成本。

JEP 388: Windows/AArch64 Port

将 JDK 移植到 Windows/AArch64。

JEP 389: Foreign Linker API (Incubator)

引入一个 API,提供对本机代码的静态类型、纯 Java 访问。此 API 与外部内存 API (JEP 393) 一起,将大大简化绑定到本机库的容易出错的过程。

详情可以查看文章  Foreign-Memory Access API外部内存API -CSDN博客

JEP 390: Warnings for Value-Based Classes

将原始包装器类指定为基于值的,并弃用其 构造函数,提示新的弃用警告。 提供有关在 Java 平台中任何基于值的类。

对于用构造函数创建包装类的java语句例如:Double d = new Double(Math.random())

java8会给出建议

java9-java15

 java16代码给出警告(飘红),但是可以运行,

JEP 392: Packaging Tool

提供用于打包独立 Java 应用程序的工具。jpackage

该工具由 JEP 343 作为孵化工具引入 JDK 14。在 JDK 15 中,它仍然是一个孵化工具,以便有时间获得额外的反馈。现在,它已准备好从孵化提升为生产就绪功能。由于此转换,模块的名称将从 更改为 。jpackagejpackagejdk.incubator.jpackagejdk.jpackage

相对于 JEP 343 的唯一实质性变化是,我们将该选项替换为更通用的选项,如下:--bind-services--jlink-options

基本用法

$ jpackage --name myapp --input lib --main-jar main.jar

如果所打包文件没有Main-Class属性,则必须指定主类

$ jpackage --name myapp --input lib --main-jar main.jar \--main-class myapp.Main

模块化

$ jpackage --name myapp  --module-path --input lib --main-jar main.jar \--main-class myapp.Main

JEP 393: Foreign-Memory Access API (Third Incubator)

引入一个 API,允许 Java 程序安全高效地访问 Java 堆之外的外部内存。

 详情可以查看文章  Foreign-Memory Access API外部内存API -CSDN博客

JEP 394: Pattern Matching for instanceof

通过运算符的模式匹配来增强 Java 编程语言。模式匹配允许程序中的通用逻辑,即条件提取 对象中的组件,以更简洁、更安全地表达。instanceof

详情可以查看文章 java14学习笔记-part1-CSDN博客

JEP 395: Records

使用Records增强 Java 编程语言 充当不可变数据的透明载体。

记录由 JEP 359 提出,并在 JDK 14 中作为预览功能提供。

为了响应反馈,JEP 384 对设计进行了改进,并在 JDK 15 中作为 预览功能。第二次预览的改进如下:

  • 在第一个预览版中,规范构造函数需要为 . 在第二个预览中,如果规范构造函数是 隐式声明,则其访问修饰符与 record 类相同;如果 规范构造函数被显式声明,然后它的访问修饰符必须提供 至少与 Record 类一样多的访问权限。public

  • 注释的含义被扩展为包括 注释方法是显式声明的访问器方法的情况 记录组件。@Override

  • 为了强制执行紧凑构造函数的预期用途,它变成了编译时 error 分配给构造函数正文中的任何实例字段。

  • 能够声明本地记录类、本地枚举类和本地接口 被介绍。

本 JEP 建议在 JDK 16 中完成该功能,并进行以下改进:

  • 放宽长期以来的限制,即内部阶级 不能声明显式或隐式静态的成员。这将成为合法的 特别是,将允许内部类声明作为记录类的成员。

根据进一步的反馈,可能会进行其他改进。

详情可以查看文章  java14学习笔记-part1-CSDN博客

JEP 396: Strongly Encapsulate JDK Internals by Default

默认情况下,强封装 JDK 的所有内部元素,但 用于关键的内部 API,例如 .允许结束 用户选择宽松的强封装,即一直 自 JDK 9 以来的默认值。sun.misc.Unsafe

持续提升 JDK 的安全性和可维护性

鼓励开发者从使用内部元素迁移到 标准 API,以便他们和他们的用户都可以在没有 对未来的 Java 版本大惊小怪。

JEP 397: Sealed Classes (Second Preview)

使用密封的类和接口增强 Java 编程语言。密封的类和接口限制了哪些其他类或接口可以扩展或实现它们。这是 JDK 16 中的预览语言功能。

密封类是由 JEP 360 提出的,并且在 JDK 15 中作为预览功能交付。

本 JEP 建议在 JDK 16 中重新预览该功能,并进行以下改进:

  • 指定上下文关键字的概念,取代先前的概念JLS 中的受限标识符受限关键字。引入字符序列 、 和作为上下文 关键字。sealednon-sealedpermits

  • 与匿名类和 lambda 表达式一样,局部类可能不是密封类的子类,在确定隐式声明的允许类或接口的子类时。sealedsealed

  • 增强缩小引用转换,以执行更严格的检查相对于密封类型层次结构的转换。

详情可以查看文章 java15学习笔记-密封类-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919218.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

useCallback 的陷阱:当 React Hooks 反而拖了后腿

我有一支技术全面、经验丰富的小型团队,专注高效交付中等规模外包项目,有需要外包项目的可以联系我很多代码库到处都是 useCallback / useMemo。初衷是好的:减少不必要的重新渲染、稳定引用、提速。然而,用错场景或铺天盖地地包一…

【IntelliJ IDEA】如何在pom.xml中去除maven中未使用的依赖

pom.xml中去除maven中未使用的依赖主要解决的问题一、怎么做?二、重点依赖类型解析说明三、什么时候做?四、有什么风险要注意的?五、补充一个快捷方法使用六、IDEA的terminal中如何才能使用命令mvn呢?主要解决的问题 你的项目中p…

安卓9.0系统修改定制化____关于自启脚本的规律、编写与实战示例 推荐收藏【二】

在定制化ROM服务中,许多功能都需要通过自启脚本来实现。上期博文详细解析了脚本编写的规律、权限设置以及常见错误踩坑的排查与修复方法,并逐行解释了脚本代码的含义。掌握这些基础知识后,这期再以实例演示的过程来使我们使用更得心应手。。 通过博文了解💝💝💝 1�…

选择gpt-5还是claude-4-sonnect

了解我的朋友都知道,我是一个伪全栈工程师,一个人加AI编程工具打天下。 最近,gpt-5已经出来有一段时间了,cursor第一时间就支持了gpt-5模型,我第一时间就尝试了gpt-5效果。说实话,gpt-5和claude-4-sonnect都…

自动化运维实验(二)---自动识别设备,并导出配置

目录 一、实验拓扑 二、实验目的 三、实验步骤 实验思路: 代码部分: 四、实验结果: 一、实验拓扑 二、实验目的 ssh远程登录后,识别设备类型(华三、华为、锐捷、山石、飞塔、深信服等),再…

Matlab(4)初阶绘图

一、Basic plotting1.plot()plot(x,y) :x图片中点的横坐标,y图片中点的纵坐标plot(y) :y图片中点的纵坐标,x图片中点的横坐标默认为1,2,3,4,5........plot(co…

服务器硬件电路设计之 I2C 问答(五):I2C 总线数据传输方向如何确定、信号线上的串联电阻有什么作用?

在服务器硬件电路设计中,I2C 总线作为常用的串行通信总线,其数据传输方向的确定和信号线上串联电阻的作用是关键知识点。​I2C 总线数据传输方向由主设备和从设备的角色以及读写位共同确定。主设备是发起通信的一方,从设备则是被寻址的对象。…

OpenBMC中C++策略模式架构、原理与应用

1. 策略模式概述 策略模式(Strategy Pattern)是一种行为型设计模式,它允许在运行时动态选择算法或行为,而无需修改客户端代码。 核心思想:封装可互换的算法族,使它们可以独立于使用它们的客户端变化。 1.…

【python实用小脚本-187】Python一键批量改PDF文字:拖进来秒出新文件——再也不用Acrobat来回导

Python一键批量改PDF文字:拖进来秒出新文件——再也不用Acrobat来回导 PDF文字替换, 批量导出, 零依赖转档, 一键完成, 瑞士军刀 故事开场:一把瑞士军刀救了周五下班的你 周五 18:00,老板甩来 50 份合同 PDF: “把里面的‘2023’全…

汽车后雾灯色度难达标?OAS 软件精准解决破瓶颈

汽车后雾灯案例分析简介汽车后雾灯是车辆在能见度较低的雾、雨、雪等恶劣天气条件下行驶时,向后方车辆传递警示信号的重要装置,其性能直接关系到车辆的后方安全。根据规定,红色信号灯需符合 CIE1931 标准,其色度坐标 X 值应在 0.6…

[系统架构设计师]架构设计专业知识(二)

[系统架构设计师]架构设计专业知识(二) 一.信息系统基础知识 1.信息系统概述 信息系统功能:输入,存储,处理,输出,控制 理查德.诺兰: 初始,传播,控制&#xff…

如果用ApiFox调用Kubernetes API,需要怎么设置证书?

针对Docker Desktop中Kubernetes访问报SSL/TLS信任关系错误的问题,以下是综合解决方案:要在Postman中调用Kubernetes API并设置证书,需按以下步骤操作:🔐 证书设置步骤‌提取证书文件‌从kubeconfig文件(~/…

nodejs 路由/请求

//导入模块 const express require(express); //创建应用 const app express();//设置路由 app.get(/,(req,resp)>{//输出响应console.log(request coming.............);resp.json(req.headers); });app.get(/user/:id, (req, res) > {const userId req.params.id; …

Python 数据可视化:柱状图/热力图绘制实例解析

Python 数据可视化:柱状图绘制实例解析 一、引言 数据可视化是数据分析中至关重要的环节,它能将复杂的数据以直观的图形方式呈现,帮助我们更好地理解数据特征和规律。Python 拥有丰富的可视化库,其中 Matplotlib 是最常用的基础库…

API生命周期10阶段

一、策略规划(Strategy Planning) 核心任务:业务价值对齐、技术路线设计关键产出: API产品蓝图:定义业务领域边界(如支付API域、用户API域)治理规范:《API安全标准》《版本管理策略》…

UGUI源码剖析(9):布局的实现——LayoutGroup的算法与实践

UGUI源码剖析(第九章):布局的实现——LayoutGroup的算法与实践 在前一章中,我们剖析了LayoutRebuilder是如何调度布局重建的。现在,我们将深入到布局核心,去看看那些具体的组件——LayoutGroup系列组件是如…

GitHub PR 提交流程

step1 在 GitHub 上 fork 目标仓库&#xff08;手动操作&#xff09; step2 将 fork 的目标仓库克隆到本地 git clone https://github.com/<your-username>/<repo-name>.git cd <repo-name>step3 与上游目标仓库建立链接 git remote add upstream https://gi…

矿物分类案列 (一)六种方法对数据的填充

目录 矿物数据项目介绍&#xff1a; 数据问题与处理方案&#xff1a; 数据填充策略讨论&#xff1a; 模型选择与任务类型&#xff1a; 模型训练计划&#xff1a; 一.数据集填充 1.读取数据 2.把标签转化为数值 3.把异常数据转化为nan 4.数据Z标准化 5.划分训练集测试…

vue:vue3的方法torefs和方法toref

在 Vue 3 的 Composition API 中,toRef 和 toRefs 是两个用于处理响应式数据的重要工具,它们专门用于从 reactive() 对象中提取属性并保持响应性。 toRef() 作用:将 reactive 对象的单个属性转换为一个 ref 对象,保持与源属性的响应式连接。 使用场景: 需要单独提取 rea…

Android 移动端 UI 设计:前端常用设计原则总结

在 Android 移动端开发中&#xff0c;优秀的 UI 设计不仅需要视觉上的美观&#xff0c;更需要符合用户习惯、提升操作效率的设计逻辑。前端 UI 设计原则是指导开发者将功能需求转化为优质用户体验的核心准则&#xff0c;这些原则贯穿于布局结构、交互反馈、视觉呈现等各个环节。…