| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 昨天才整明白的Java 16 中的新特性今天就在小姐姐手中交了作业 -> 正文阅读 |
|
[Java知识库]昨天才整明白的Java 16 中的新特性今天就在小姐姐手中交了作业 |
标准 Java 最新升级的亮点包括原始类、密封类、记录、向量 API 以及适用于 ARM64 和 Alpine Linux 上的 Windows 的端口。 截至 3 月 16 日,Oracle 的 Java 开发工具包 (JDK) 16 现已作为生产版本提供。 JDK 16 中的新功能范围从密封类的第二次预览到记录,再到用于垃圾收集的并发线程堆栈处理。 JDK 16 是 Java 16 的参考实现,Java 16 是JDK 15 之后的标准 Java 版本,JDK 15于 9 月 15 日发布。JDK 16 是一个功能版本,仅得到 Oracle 六个月的支持。JDK 17将于 9 月发布,将是一个长期支持 (LTS) 版本。Oracle 将 JDK 16 作为迁移到 JDK 17 的起点,用户可以在部署到 JDK 17 之前在 JDK 16 上进行测试。 LTS 版本每三年发布一次。 GitHub 星标 115k+的 Java开发教程,超级硬核! 基于值的类提案的警告将原始包装类指定为基于值的,并弃用它们的构造函数以进行删除,提示新的弃用警告。提供有关在 Java 平台中任何基于值的类的实例上进行同步的不当尝试的警告。推动这项工作的是瓦尔哈拉计划,它以原始类的形式追求对 Java 编程模型的显着增强。原始类将实例声明为无标识的并且能够进行内联或扁平化表示,其中实例可以在内存位置之间自由复制并使用实例字段的值进行编码。Java 中原始类的设计和实现现在已经足够成熟,可以预期在未来版本中将 Java 平台的某些类迁移到原始类。迁移的候选者在 API 规范中被非正式地指定为基于值的类。 在 JDK 15 和 JDK 16 中再次预览密封类和接口限制了哪些其他类和接口可以扩展或实现它们。该计划的目标包括允许类或接口的作者控制负责实现它的代码,提供比访问修饰符更具声明性的方式来限制超类的使用,并通过提供基础来支持模式匹配的未来方向模式分析。 默认情况下对 JDK 内部的强封装除了关键的内部 API,如misc.Unsafe. 用户可以选择自 JDK 9 以来一直默认的宽松强封装。该提案的目标包括提高 JDK 的安全性和可维护性,作为Project Jigsaw 的一部分,并鼓励开发人员从使用内部元素迁移到使用标准 API,以便开发人员和最终用户都可以轻松更新到未来的 Java 版本。该提案确实存在现有 Java 代码无法运行的主要风险。鼓励开发人员使用 jdeps 工具来识别依赖于 JDK 内部元素的代码并切换到标准替换有空的时候。开发人员可以使用现有版本(例如 JDK 11)来测试现有代码,方法 外部链接器 API提供对本机代码的静态类型、纯 Java 访问。该 API 将在 JDK 16 中处于孵化器阶段。与提议的外部内存访问 API 一起,外部链接器 API 将大大简化绑定到本机库的其他容易出错的过程。该计划旨在用卓越的纯 Java 开发模型取代 JNI(Java 本地接口),以提供 C 支持,并且随着时间的推移变得足够灵活以适应对其他平台的支持,例如 32 位 x86,以及用 C 以外的语言编写的外部函数,例如 C++。性能应该优于或与 JNI 相媲美。 移动 ZGC(Z Garbage Collector)线程堆栈处理从安全点到并发阶段。该计划的目标包括从 ZGC 安全点中删除线程堆栈处理;使堆栈处理变得懒惰、协作、并发和增量;从 ZGC 安全点中删除所有其他每线程根处理;并为其他 HotSpot VM 子系统提供一种机制来延迟处理堆栈。ZGC 旨在使 HotSpot 中的 GC 暂停和可扩展性问题成为过去。到目前为止,随着堆大小和元空间大小而扩展的 GC 操作已从安全点操作移到并发阶段。这些包括标记、重定位、引用处理、类卸载和大多数根处理。仍然在 GC 安全点中完成的唯一活动是根处理的子集和有时间限制的标记终止操作。这些根包括 Java 线程堆栈和其他线程根,这些根是有问题的,因为它们随线程数量而扩展。为了超越当前的情况,每个线程的处理,包括堆栈扫描,必须转移到并发阶段。有了这个计划,改进延迟的吞吐量成本应该是微不足道的,并且在典型机器上的 ZGC 安全点内花费的时间应该少于一毫秒。 弹性元空间能力它可以更迅速地将未使用的 HotSpot VM 类元数据(元空间)内存返回给操作系统,减少元空间占用空间并简化元空间代码以降低维护成本。Metaspace 存在堆外内存使用率高的问题。该计划要求用基于伙伴的分配方案替换现有的内存分配器,提供一种将内存划分为多个分区以满足内存请求的算法。这种方法已被用于诸如 Linux 内核之类的地方,并且可以以较小的块分配内存以减少类加载器的开销。碎片化也将减少。此外,从操作系统到内存管理领域的内存承诺将根据需要延迟完成,减少从大型竞技场开始但不立即使用它们或可能不会充分利用它们的装载机的占用空间。为了充分利用伙伴分配提供的弹性,元空间内存将被安排成大小均匀的颗粒,这些颗粒可以相互独立地提交和取消提交。 启用 C++ 14 语言功能以允许在 JDK C++ 源代码中使用C++ 14功能,并提供有关哪些功能可以在 HotSpot VM 代码中使用的具体指导。通过 JDK 15,JDK 中 C++ 代码使用的语言特性已被限制为 C++98/03 语言标准。在 JDK 11 中,源代码已更新以支持使用较新版本的 C++ 标准进行构建。这包括能够使用支持 C++ 11/14 语言功能的最新版本的编译器进行构建。此提案不建议对在 HotSpot 之外使用的 C++ 代码进行任何样式或用法更改。但是要利用 C++ 语言功能,需要进行一些构建时更改,具体取决于平台编译器。 孵化器阶段的向量 API其中 JDK 将配备孵化器模块,jdk.incubator.vector, 表达在支持的 CPU 架构上编译为最佳向量硬件指令的向量计算,以实现与等效标量计算相比的卓越性能。矢量 API 提供了一种用 Java 编写复杂矢量算法的机制,使用 HotSpot VM 中预先存在的矢量化支持,但使用用户模型使矢量化更具可预测性和鲁棒性。该提案的目标包括提供清晰简洁的 API 来表达一系列向量计算,通过支持多个 CPU 架构而与平台无关,并在 x64 和 AArch64 架构上提供可靠的运行时编译和性能。优雅降级也是一个目标, 将 JDK 移植到 Windows/AArch64 平台随着新的服务器级和消费级 AArch64 (ARM64) 硬件的发布,Windows/AArch64 因需求而成为一个重要的平台。虽然移植本身已经基本完成,但该提案的重点涉及将移植集成到主线 JDK 存储库中。 JDK 移植到 Alpine Linux在 x64 和 AArch64 架构上将JDK 移植到 Alpine Linux和其他使用 musl 作为其主要 C 库的 Linux 发行版。Musl 是 ISO C 和 Posix 标准中描述的标准库功能的 Linux 实现。Alpine Linux 由于其较小的镜像大小,被广泛用于云部署、微服务和容器环境。Linux 的 Docker 镜像小于 6MB。让 Java 在此类设置中开箱即用将允许 Tomcat、Jetty、Spring 和其他流行框架在这些环境中本地工作。通过使用jlink来减少 Java 运行时的大小,用户可以创建一个更小的图像来运行特定的应用程序。 记载类提供充当不可变数据的透明载体的记录类。记录可以被视为名义元组。该版本中最受期待的特性之一,通过削减样板代码来减少 Java 的仪式,记录在 JDK 14 和 JDK 15 中进行了预览。该计划的目标包括设计一个面向对象的构造,表达一个简单的值聚合,帮助开发人员专注于对不可变数据而不是可扩展行为进行建模,自动实现数据驱动的方法,例如equals和 访问器,并保留长期存在的 Java 原则,例如名义类型和迁移兼容性。 添加Unix 域套接字通道其中 Unix 域 (AF_UNIX) 套接字支持被添加到 nio.channels 包中的套接字通道和服务器套接字通道 API。该计划还扩展了继承的通道机制以支持 Unix 域套接字通道和服务器套接字通道。Unix 域套接字用于同一主机上的进程间通信。它们在大多数方面类似于 TCP/IP 套接字,只是它们由文件系统路径名而不是 IP 地址和端口号寻址。新功能的目标是支持在主要 Unix 平台和 Windows 中通用的 Unix 域套接字通道的所有功能。Unix 域套接字通道在读/写行为、连接设置、服务器对传入连接的接受方面与现有 TCP/IP 通道的行为相同,并与选择器中的其他非阻塞可选通道复用。对于本地进程间通信,Unix 域套接字比 TCP/IP 环回连接更安全、更高效。 外部内存访问 API允许 Java 程序安全地访问 Java 堆外的外部内存。之前在 JDK 14 和 JDK 15 中孵化的外部内存访问 API 将在 JDK 16 中重新孵化,增加了改进。已经进行了更改,包括MemorySegment和MemoryAddresses接口之间更清晰的角色分离。该提案的目标包括提供单一 API 来操作各种外部内存,包括本机、持久和托管堆内存。API 不应破坏 JVM 的安全性。该提案的动机是许多 Java 程序访问外部内存,例如 Ignite、Memcached 和 MapDB。但是Java API 并没有为访问外部内存提供令人满意的解决方案。 图案匹配的instanceof操作这也被预览在两个JDK 14和JDK 15.这将在JDK定稿16.图案匹配允许公共逻辑程序中,从对象的组件的即有条件的提取,能够更精确表达和安全。 提供用于打包自包含 Java 应用程序的 jpackage 工具作为JDK 14 中的孵化工具引入,jpackage 在 JDK 15 中仍处于孵化阶段。随着 JDK 16,jpackage 转向生产,支持原生包格式,为用户提供自然的安装体验,并允许在打包时指定启动时间参数。格式包括 Windows 上的 msi 和 exe,MacOS 上的 pkg 和 dmg,以及 Linux 上的 deb 和 rpm。该工具可以直接从命令行或以编程方式调用。新的打包工具解决了许多 Java 应用程序需要以一流的方式安装在本机平台上的情况,而不是放在类路径或模块路径上。需要适合本机平台的可安装包。 将 OpenJDK 源代码存储库从 Mercurial 迁移到 Git推动这项工作的是版本控制系统元数据大小以及可用工具和托管方面的优势。 迁移到 GitHub与 Mercurial-to-Git 迁移相关,JDK 16 源代码存储库位于流行的代码共享站点上。Java 11 及更高版本的 JDK 功能版本和 JDK 更新版本将成为该计划的一部分。Mercurial JDK 和 JDK-sandbox 到 Git、GitHub 和 Skara 的过渡已于 9 月 5 日完成,并开放供贡献。 总结可以在oracle.com上找到 Oracle JDK 的下载。可以在jdk.java.net上找到适用于 Linux、Windows 和 MacOS 的 JDK 16 的开源版本。Oracle 提供对其标准 Java 版本的订阅,从而为该平台提供支持。该公司指出,许多基于 Java 的技术,例如 Apache Lucene 搜索库、Apache Tomcat servlet 容器和 Gradle 构建工具,已经支持 JDK 16。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 18:40:50- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |