OpenJDK 计划要求限制 JNI 的使用


Java 社区正在推进一项名为“JEP 472:Prepare to Restrict the Use of JNI(准备限制 JNI 使用)”的提案,旨在保留 Java Native Interface (JNI) 作为与本地代码互操作的标准方式的状态。

JNI 在 JDK 1.1(可追溯到 1997 年 2 月)中被引入,作为 Java 代码与本地代码(通常用 C 语言编写)之间互操作的主要手段,允许 Java 代码调用本地代码(向下调用)和本地代码调用 Java 代码(向上调用)。

但提案指出,Java 代码和本地代码之间的任何交互都存在风险,它可能会损害应用程序和 Java 平台本身的完整性。根据默认完整性策略,所有能够破坏完整性的 JDK 功能都必须获得应用程序开发人员的明确批准。

准备限制 JNI 的使用是确保 Java 平台默认完整性的长期协调努力的一部分。其他相关举措还包括删除 sun.misc.Unsafe 中的内存访问方法(JEP 471)和限制代理的动态加载(JEP 451)。

该提案由 Ron Pressler 提出,于 2023 年 5 月创建,并于 7 月 16 日更新,计划在预计于 2025 年 3 月推出的 JDK 24 中更新发布。

提案要求对 JNI 的使用发出警告,并调整 Foreign Function & Memory (FFM) API 以一致的方式发出警告。所有这些警告的目的在于让开发人员做好准备,即未来版本中将默认禁止与本地代码互操作,无论是通过 JNI 还是 FFM API。开发人员可以在必要时有选择地启用这些接口。

同时,提案还计划协调 JNI 和 FFM API 的使用,以便库维护人员可以从一个迁移到另一个,而无需开发人员更改任何命令行选项。而弃用 JNI 或从 Java 平台中删除 JNI,以及限制通过 JNI 调用的本地代码的行为均不包含在目标范围内。所有本地 JNI 函数仍可供本地代码使用。

更多详情可查看:https://openjdk.org/jeps/472


相關推薦

2023-01-24

OpenJDK 官网公布了一项新的 JEP 草案,内容是不再要求 super() 或 this() 在构造器中作为首条语句出现。 该草案当前目标是更改 Java 语言规范,并对 Java 编译器进行相应的更改,以便: super()或this()不再必须作为构造器中的第

2023-03-22

的表达范围广泛的向量计算。 更多详情可查看:https://openjdk.org/projects/jdk/20/ 下载:https://jdk.java.net/20/

2024-07-30

Java 专业人士的反馈,探讨了 Oracle Java 用户迁移到基于 OpenJDK 的替代方案的原因、迁移过程和时间的详细信息,以及支持和技术专业知识对于 OpenJDK 发行版的重要性。 多年来 Oracle 在 Java 用户中的份额一直在下降,从 2020 年

2022-10-27

版本主要变化 将 GraalVM 社区版的 Java 组件捐赠给上游 OpenJDK Oracle 正在向 OpenJDK 贡献 GraalVM 社区版 Java 代码,使 GraalVM 与 Java 的开发更紧密地保持一致。 按照计划,GraalVM JIT 和原生镜像将成为 OpenJDK 的一部分。Oracle 会根据

2023-06-17

金会维护。 近日,Eclipse OpenJ9发布了v0.39版本,带来了对OpenJDK 20的支持,以及一些其他的改进和修复。 OpenJDK 20是Java的最新版本,包含了一些新的特性,如最新的向量API、更新的虚拟线程实现、外部函数和内存API等。Eclipse OpenJ

2021-12-16

为了推动 Java 向前发展,OpenJDK 17 打算弃用,以便与旧的小应用 API ( JEP 398 )一起删除。 安全管理器功能可追溯到 Java 1.0,在我们用按键手机或者诺基亚在 Web 浏览器上下载 Java 游戏小应用(Applet)的时代,安全管理器通过

2022-03-30

罚款,一夜之间完全卸载了 JDK,其中一些企业已开始用 OpenJDK 开源替代方案应对甲骨文的审计,还有一些企业则是计划完全替换掉现有的技术栈。

2024-10-24

OpenJDK 正在制定一项“JEP 493: Linking Run-Time Images without JMODs”的提案,旨在将 JDK 的大小减少约 25%。 “通过启用jlink工具,无需使用 JDK 的 JMOD 文件即可创建自定义运行时映像,从而将 JDK 的大小减少约 25%。此功能必须在 JDK 生

2023-06-13

EP 将正式从 JDK 21 中删除。此决策只与支持 Shenandoah GC 的 OpenJDK 版本用户有关;不会影响 G1 GC、Z Garbage Collector(ZGC)或其他现代垃圾收集器。也不影响使用 G1 GC 和 ZGC 的 Java 发行版,如 Oracle OpenJDK 和 Oracle JDK。 JDK 21 的初始候选

2023-03-08

的计算限制 更新了捆绑在 Sweet Home 3D 安装程序中的 Azul OpenJDK 运行时间,Windows 64 位下为 Azul OpenJDK 11.0.18,macOS ≥ 10.9 下为 Azul OpenJDK 15.0.10 其他小错误的修复和增强 更多详情可查看:https://www.sweethome3d.com/history.jsp

2023-06-15

包括照片/视频的部分访问)、新的手势导航动画,以及与 OpenJDK 17 LTS 版本进一步对齐的功能。 非线性字体放大 从 Android 14 开始,系统默认支持字体放大至 200%。这项变更为弱视用户提供了符合网络内容无障碍指南 (WCAG) 的

2022-09-16

业务开发。更多更新信息请参考 changelog。 环境要求 OpenJDK 8或者高版本Oracle JDK 8 Spring Boot 2.5以上 项目地址 Github:https://github.com/NotFound403/payment-spring-boot Gitee: https://gitee.com/felord/payment-spring-boot 欢迎 Star

2023-01-26

开发的应用程序,之后随着时间的推移,Google 会将这一计划的门槛提高到 Android 6.0(Marshmallow)。 Android 的开发人员指出,由于旧版 Android 系统缺少很多安全更新和安全保护措施,目前不少恶意软件会故意针对较旧的 Android 版

2022-06-28

科技媒体 Phoronix 对从 OpenJDK 8 到 OpenJDK 19 的多个 JDK 版本进行了性能基准测试。此外,作为参考对比,还加入了两个替代实现方案:OpenJ9 和 GraalVM CE。 测试环境: 搭载 Intel Core i5 12600K CPU、运行 Ubuntu 22.04 LTS 的电脑