3

此位置的 JNI 规范中有以下注释:

笔记

从 JDK/JRE 1.1 开始,程序员可以使用 Get/ReleaseArrayElements 函数来获取指向原始数组元素的指针。如果 VM 支持 pinning,则返回指向原始数据的指针;否则,制作一份副本。

从 JDK/JRE 1.3 开始引入的新函数允许本地代码获得指向数组元素的直接指针,即使 VM 不支持固定。

第二句话是令人费解的,因为我找不到这样做的方法。所有数组访问函数都有可能进行复制,即使是 GetPrimitiveArrayCritical()。更易读的规范版本“Java™ Native Interface: Programmer's Guide and Specification”在这里没有帮助,因为它是在 1999 年发布的,在 JDK 1.3 发布之前。据我所知,在 1.3 中根本没有添加任何 JNI 方法——在规范中搜索字符串“1.3”只能找到这个用途!

有谁知道这个笔记指的是什么?

4

1 回答 1

1

请参阅有没有办法通过 JNI 将 Java 数组传递给 C 而无需复制它?. 答案是函数是GetPrimitiveArrayCritical()。它不保证 no-copy ,但不需要固定来提供适当的访问。

同样相关的是对链接问题的评论:DirectBuffer保证可以在任何 VM 上提供就地访问。

于 2013-09-14T20:33:43.287 回答