Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
人工智能
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
更多话题
JEP 419:JDK18将无需JNI调用JVM外部程序和数据
21-11-16
banq
外部函数和内存 API 是由JEP 412提出的,该API能使Java程序无需JNI直接能够调用本地库和处理本地数据。
根据Java 17中反馈进行了改进,并在 Java 18 中重新推出孵化 API。
目标
易用性— 用高级的纯 Java 开发模型替换 Java 本机接口 (
JNI
)。
性能 — 提供与JNI和sun.misc.Unsafe等现有API相当的性能
通用性— 提供对不同类型的外部内存(例如,本机内存、持久内存和托管堆内存)进行操作的方法,并且随着时间的推移,以适应其他平台(例如,32 位 x86)和用其他语言编写的外部函数比 C(例如,C++、Fortran)。
安全——默认禁用不安全的操作,只有在应用程序开发人员或最终用户明确选择后才允许它们。
多年来,出现了许多框架来填补 JNI 留下的空白,包括
JNA
、
JNR
和
JavaCPP
。虽然这些框架通常比 JNI 有了显着的改进,但情况仍然不太理想,尤其是与提供一流的本地互操作的语言相比时。例如,Python 的
ctypes
包可以在本地库中动态包装函数,无需任何胶水代码。其他语言,例如
Rust
,提供了从 C/C++ 头文件机械地派生本机包装器的工具。
最终,Java 开发人员应该有一个受支持的 API,让他们可以直接使用任何被认为对特定任务有用的本地库,而没有 JNI 的繁琐和笨拙。
java18