Java17是一个重要的特性发布,也是比较常用的一个版本,根据 2024Java生态统计,Java 17、11 和 8 的用户比例分别为 35%、33% 和 29%。它遵循了自Java10以来引入的Java发布步调,并于2021年 9 月 14 日发布,在Java16发布后的六个月内发布。

306:Restore Always-Strict Floating-Point Semantics
356:Enhanced Pseudo-Random Number Generators
382:New macOS Rendering Pipeline
391:macOS/AArch64 Port
398:Deprecate the Applet API for Removal
403:Strongly Encapsulate JDK Internals
406:Pattern Matching for switch (Preview)
407:Remove RMI Activation
409:Sealed Classes
410:Remove the Experimental AOT and JIT Compiler
411:Deprecate the Security Manager for Removal
412:Foreign Function & Memory API (Incubator)
414:Vector API (Second Incubator)
415:Context-Specific Deserialization Filters

JEP 306: Restore Always-Strict Floating-Point Semantics

默认使用严格的浮点语义即在类上默认都会加上strictfp修饰词如下图

strictfp是用来避免因硬件或操作系统的差异导致的计算结果不一致。但是即使加了strictfp关键字,计算的精度也不准确,所以精确计算还是要用BigDecimal

JEP 356: Enhanced Pseudo-Random Number Generators

为伪随机数提供新的接口类型和实现(PRNG),包括可跳转的 PRNG 和附加类 可拆分的 PRNG 算法 (LXM)

详情可以查看文章  java17学习笔记-增强型伪随机数生成器-CSDN博客

JEP 382: New macOS Rendering Pipeline

使用 Apple Metal API 作为现有管道的替代方法,为 macOS 实现 Java 2D 内部渲染管道,该管道使用已弃用的 Apple OpenGL API。

大多数图形 Java 应用程序都是使用 Swing UI 工具包编写的,该工具包通过 Java 2D API 进行渲染。在内部,Java 2D 可以使用软件渲染加上屏幕的 blit,也可以使用特定于平台的 API,例如 Linux 上的 X11/Xrender、Windows 上的 Direct3D 或 macOS 上的 OpenGL。这些特定于平台的 API 通常提供比软件渲染更好的性能,并且通常会减轻 CPU 的负担。Metal 是用于此类渲染的新 macOS 平台 API,取代了已弃用的 OpenGL API。(这个名称与 Swing “Metal” Look and Feel 无关,这只是一个巧合。

此次更新创建了大量新的内部实现代码来使用 Metal 框架,就像我们已经为其他特定于平台的 API 所做的那样。虽然很容易适应现有框架,但新代码在使用图形硬件方面更加现代,使用着色器而不是固定的函数管道。这些更改仅限于特定于 macOS 的代码,即使 Metal 和 OpenGL 之间共享的代码也只有极少量被更新。我们没有引入任何新的 Java API,也没有更改任何现有的 API。

Metal 管道可以与 OpenGL 管道共存。当图形应用程序启动时,会选择其中一个。目前,OpenGL 仍然是默认值。仅当在启动时指定 Metal 或 OpenGL 初始化失败时才使用 Metal,就像在不支持 OpenGL 的未来版本的 macOS 中发生的情况一样。

在集成此 JEP 时,Apple 尚未删除 OpenGL。在此之前,应用程序可以通过在命令行上指定来选择加入 Metal。我们将在未来的版本中将 Metal 渲染管线设为默认值。-Dsun.java2d.metal=truejava

JEP 391: macOS/AArch64 Port

将 JDK 移植到 macOS/AArch64。

和windows一样,将 JDK 移植到 Windows/AArch64。windows在java16中已经实现了

JEP 398: Deprecate the Applet API for Removal

弃用 Applet API 以进行删除。这基本上是无关紧要的,因为所有 Web 浏览器供应商要么已经删除了对 Java 浏览器插件的支持,要么宣布了这样做的计划。

弃用标准 Java API 的以下类和接口,以便删除:

  • java.applet.Applet
  • java.applet.AppletStub
  • java.applet.AppletContext
  • java.applet.AudioClip
  • javax.swing.JApplet
  • java.beans.AppletInitializer

弃用引用上述类和接口的任何 API 元素,包括以下方法和字段,以进行删除:

  • java.beans.Beans
  • javax.swing.RepaintManager
  • javax.naming.Context

JEP 403: Strongly Encapsulate JDK Internals

强烈封装JDK的所有内部元素,但关键的内部API(如sun.misc.Unsafe)除外将不再可能像JDK 9到JDK 16,通过单个命令行选项放宽对内部元素的强封装

本JEP的目标、非目标、动机、风险和假设部分与JEP 396基本相同。

可以浏览文章 java17学习笔记-Deprecate the Applet API for Removal-CSDN博客

JEP 406: Pattern Matching for switch (Preview)

继续增强switch表达式后续几个版本都会增强,直到java21版本发布

增强内容可以查看和总结可以查看文章:java17学习笔记-switch总结-CSDN博客

JEP 407: Remove RMI Activation

删除远程方法调用 (RMI) 激活机制,同时保留 RMI 的其余部分。

java15就已经提出 JEP 385: Deprecate RMI Activation for Removal

原因

RMI激活已过时

RMI激活大多未使用

RMI激活会带来持续的维护负担

  • 从 Java SE API 规范中删除包java.rmi.activation
  • 更新 RMI 规范以删除提及 RMI 激活
  • 删除实现 RMI 激活机制的 JDK 库代码
  • 删除 RMI 激活机制的 JDK 回归测试
  • 删除 JDK 的激活守护程序及其文档rmid

JEP 409: Sealed Classes

密封类是java15中提出来新加入的类

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

JEP 410: Remove the Experimental AOT and JIT Compiler

删除实验性的基于Java的提前(AOT)和准时(JIT)编译器。自引入以来,这个编译器几乎没有什么用且维护成本巨高。

保留实验性的Java级JVM编译器接口(JVMCI),以便开发人员可以继续使用外部构建的编译器版本进行JIT编译。

JEP 411: Deprecate the Security Manager for Removal

弃用安全管理器,以便在未来的版本中删除。安全管理器可以追溯到Java 1.0。多年来,它一直不是保护客户端Java代码的主要手段,很少用于保护服务器端代码,而且维护成本很高。为了推动Java平台的发展,我们将弃用Security Manager,以便与遗留的Applet API(JEP 398)一起删除。

JEP 412: Foreign Function & Memory API (Incubator)

引入API,Java程序可以通过该API与Java运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码),并通过安全地访问外部内存(即不受JVM管理的内存),API使Java程序能够调用本机库并处理本机数据,而不会出现JNI的脆弱性和危险性。

JEP 412: Foreign Function & Memory API (Incubator)

引入一个 API,Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互作。通过有效地调用外部函数(即 JVM 外部的代码)以及安全地访问外部内存(即不受 JVM 管理的内存),API 使 Java 程序能够调用本机库并处理本机数据,而没有 JNI 的脆性和危险性。

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

JEP 414: Vector API (Second Incubator)

加入矢量,主要用于机器学习、线性代数、密码学、金融和JDK本身的使用。

详情可以查看文章 java16学习笔记-Vector API-CSDN博客

JEP 415: Context-Specific Deserialization Filters

允许应用程序配置特定于上下文和动态选择的 反序列化过滤器通过调用 JVM 范围的过滤器工厂来选择 每个单独反序列化作的筛选器。

import java.io.ObjectInputFilter;
import java.util.function.BinaryOperator;public class FilterInThread implements BinaryOperator<ObjectInputFilter> {// ThreadLocal to hold the serial filter to be appliedprivate final ThreadLocal<ObjectInputFilter> filterThreadLocal = new ThreadLocal<>();// Construct a FilterInThread deserialization filter factory.public FilterInThread() {}/*** The filter factory, which is invoked every time a new ObjectInputStream* is created.  If a per-stream filter is already set then it returns a* filter that combines the results of invoking each filter.** @param curr the current filter on the stream* @param next a per stream filter* @return the selected filter*/@Overridepublic ObjectInputFilter apply(ObjectInputFilter curr, ObjectInputFilter next) {if (curr == null) {// Called from the OIS constructor or perhaps OIS.setObjectInputFilter with no current filtervar filter = filterThreadLocal.get();if (filter != null) {// Prepend a filter to assert that all classes have been Allowed or Rejectedfilter = ObjectInputFilter.rejectUndecidedClass(filter);}if (next != null) {// Prepend the next filter to the thread filter, if any// Initially this is the static JVM-wide filter passed from the OIS constructor// Append the filter to reject all UNDECIDED resultsfilter = ObjectInputFilter.merge(next, filter);filter = ObjectInputFilter.rejectUndecidedClass(filter);}return filter;} else {// Called from OIS.setObjectInputFilter with a current filter and a stream-specific filter.// The curr filter already incorporates the thread filter and static JVM-wide filter// and rejection of undecided classes// If there is a stream-specific filter prepend it and a filter to recheck for undecidedif (next != null) {next = ObjectInputFilter.merge(next, curr);next = ObjectInputFilter.rejectUndecidedClass(next);return next;}return curr;}}/*** Apply the filter and invoke the runnable.** @param filter the serial filter to apply to every deserialization in the thread* @param runnable a Runnable to invoke*/public void doWithSerialFilter(ObjectInputFilter filter, Runnable runnable) {var prevFilter = filterThreadLocal.get();try {filterThreadLocal.set(filter);runnable.run();} finally {filterThreadLocal.set(prevFilter);}}
}
        var filterInThread = new FilterInThread();ObjectInputFilter.Config.setSerialFilterFactory(filterInThread);// Create a filter to allow example.* classes and reject all othersvar filter = ObjectInputFilter.Config.createFilter("example.*;java.base/*;!*");filterInThread.doWithSerialFilter(filter, () -> {byte[] bytes = new byte[1024];var o = deserializeObject(bytes);System.out.println("111111111111111111111111111111111111111");});

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

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

相关文章

【AI应用】修改向量数据库Milvus默认密码

说明&#xff1a; 1&#xff09;部署向量数据库milvus运行一段时间后&#xff0c;想开启密码认证登录attu页面 2&#xff09;开启密码认证登录&#xff0c;提示用户和密码不正确&#xff0c;因为默认密码已存储在物理机 3&#xff09;通过attu管理页面修改向量数据库milvus默认…

分布式系统消息队列:可靠投递与延时消息实战

在分布式系统架构中&#xff0c;消息队列&#xff08;MQ&#xff09;作为解耦服务、削峰填谷、异步通信的核心组件&#xff0c;其消息投递的可靠性与延时消息的精准性直接影响业务系统的稳定性。本文结合实际业务场景&#xff0c;详细解析消息投递的全流程设计与延时消息的通用…

Java 学习笔记(基础篇6)

面向对象基础1. 类和对象(1) 示例&#xff1a;public class Student {String name "张三";int age 23;public void study() {System.out.println("学习 Java");}public void eat() {System.out.println("吃饭");} }public class Test {public …

光学件加工厂倚光科技:陪跑光学未来力量

在光学创新的漫漫长路上&#xff0c;总有一些看似 “不划算” 的坚持&#xff0c;却在悄然改写行业的未来。倚光科技的故事&#xff0c;就始于这样一种选择 —— 明知光学打样利润微薄&#xff0c;明知上百个项目中能走到量产的寥寥无几&#xff0c;仍愿意投入全球顶尖的设备与…

RabbitMQ:生产者可靠性(生产者重连、生产者确认)

目录一、生产者重连二、生产者确认一、生产者重连 当网络不稳定的时候&#xff0c;利用重试机制可以有效提高消息发送的成功率。不过SpringAMQP提供的重试机制是阻塞式的重试&#xff0c;也就是说多次重试过程中&#xff0c;当前线程是被阻塞的&#xff0c;会影响业务性能。 …

【深度学习新浪潮】空天地数据融合技术在城市三维重建中的应用

空天地数据融合技术在城市三维重建中的应用已取得显著进展,尤其在提升精度以满足具身智能机器人仿真训练需求方面,研究和产品均呈现多样化发展。以下是关键研究进展、产品方案及精度要求的详细分析: 一、研究进展与技术路径 1. 多源数据融合的技术突破 时空基准统一:通过…

Selenium自动化测试入门:cookie处理

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快driver.get_cookies() # 获得cookie 信息driver.get_cookies(name) # 获得对应name的cookie信息add_cookie(cookie_dict) # 向cookie 添加会话信息delete_cookie(na…

快解析如何让远程访问更安全?

一、勒索病毒攻击服务器的途径很多用户服务器对外开放&#xff0c;实现外网访问&#xff0c;担心服务器被勒索病毒攻击&#xff01;勒索病毒攻击服务器的途径之一是通过路由器开放的端口进行扫描攻击&#xff0c;所以尽量不要在服务器的路由器和防火墙中开放端口二、快解析如何…

Linux下编译ARPACK

本文记录Linux下编译ARPACK的流程。 零、环境 操作系统Ubuntu 22.04.4 LTSVS Code1.92.1Git2.34.1GCC11.4.0CMake3.22.1oneAPI2024.2.1 一、依赖 1.1 安装oneAPI 参见&#xff1a;Get the Intel oneAPI Base Toolkit , Get the Intel oneAPI HPC Toolkit 二、编译ARPACK …

芋道RBAC实现介绍

说明&#xff1a;之前写过一篇博客&#xff0c;介绍如何搭建一个基于角色的权限验证框架 搭建一个基于角色的权限验证框架 本文介绍在非常受欢迎的开源框架——芋道中是如何实现 RBAC 的&#xff0c;芋道的部署参考下面这篇文章&#xff1a; 芋道微服务代码部署 介绍 一般…

Docker部署Jellyfin,没有公网IP如何使用内网穿透远程访问?

Jellyfin是一款完全开源、免费的媒体服务器&#xff0c;可帮助你快速搭建属于自己的私人流媒体平台&#xff1a;电影、剧集、音乐、照片统统收纳&#xff0c;跨设备随点随播。本文将以最简洁的步骤&#xff0c;演示如何在Docker容器中部署Jellyfin&#xff0c;并通过贝锐花生壳…

Podman:Mysql(使用卷)

下载镜像hpphcomp:~$ podman pull docker.1ms.run/mysql:latest Trying to pull docker.1ms.run/mysql:latest... Getting image source signatures Copying blob c81e70a25040 done | Copying blob 31f7d8dc4024 done | Copying blob b9916866e45f done | Copying blob …

2025年渗透测试面试题总结-21(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 一、文件上传绕过方式&#xff08;Top 5&#xff09; 二、文件包含高危函数&#xff08;PHP为例&#xff0…

像海绵一样吸收技术书籍的高效学习方法

像海绵一样吸收技术书籍的高效学习方法前言六步高效阅读法步骤1&#xff1a;快速浏览章节步骤2&#xff1a;先读章末测验步骤3&#xff1a;只读粗体字步骤4&#xff1a;只读每段的首句和末句步骤5&#xff1a;通读整章步骤6&#xff1a;复习与重复高效学习技术书籍的实用技巧1.…

Day60--图论--94. 城市间货物运输 I(卡码网),95. 城市间货物运输 II(卡码网),96. 城市间货物运输 III(卡码网)

Day60–图论–94. 城市间货物运输 I&#xff08;卡码网&#xff09;&#xff0c;95. 城市间货物运输 II&#xff08;卡码网&#xff09;&#xff0c;96. 城市间货物运输 III&#xff08;卡码网&#xff09; 今天是Bellman_ford专场。带你从普通的Bellman_ford&#xff0c;到队列…

Jenkins服务器SSH公钥配置步骤

步骤1. 在Jenkins服务器上生成SSH密钥在Jenkins服务器上执行以下命令&#xff1a;# 1. 生成SSH密钥对 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ""# 2. 设置正确的权限 chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub# 3. 查看公钥内…

数据链路层-网络层-传输层

文章目录深入浅出理解网络核心&#xff1a;从交换机到TCP/UDP一、数据链路层&#xff1a;交换机的"地盘"1. 数据链路层的核心功能2. 以太网的发展历程3. 以太网中的MAC地址4. 以太网帧格式&#xff1a;数据的"快递包装"5. 交换机的工作原理&#xff1a;高效…

专题:2025跨境电商市场布局、供应链与产业带赋能报告 |附130+份报告PDF、原数据表汇总下载

原文链接&#xff1a;https://tecdat.cn/?p43616 2025年&#xff0c;跨境圈的老板们集体焦虑&#xff1a;美国关税飙到145%&#xff0c;亚马逊封号潮卷土重来&#xff0c;而东南亚却悄悄涨了246%&#xff01;这不是危言耸听——66%的美国消费者说&#xff0c;海外货涨10%就换本…

LINUX 818 shell:random;for for

问题 [rootweb ~]# a$(echo $[$RANDOM%10]) 您在 /var/spool/mail/root 中有邮件 [rootweb ~]# echo $a 3 [rootweb ~]# echo 139$a$a$a$a$a$a$a$a 13933333333 您在 /var/spool/mail/root 中有邮件 [rootweb ~]# echo 139 $a 139 3 [rootweb ~]# echo $a 3 [rootweb ~]# echo …

JavaScript 原型机制详解:从概念到实战(附个人学习方法)

原型是 JavaScript 实现继承与代码复用的核心机制,也是面试高频考点。本文结合个人学习经验、核心概念解析与实战案例,帮你彻底搞懂原型、prototype、__proto__ 及相关知识点,同时分享高效的学习方法。 一、个人学习方法:高效掌握复杂知识点 复杂概念(如原型)的学习,关…