在JNI spec at this location中有以下注释:
请注意
从JDK / JRE 1.1开始,程序员可以使用Get / ReleaseArrayElements函数来获取指向原始数组元素的指针。如果VM支持固定,则返回指向原始数据的指针;否则,制作副本。
从JDK / JRE 1.3开始引入的新功能允许本机代码获取指向数组元素的直接指针,即使VM不支持固定也是如此。
第二句话是令人费解的,因为我找不到那样做的方法。所有数组访问函数都有可能制作副本,甚至是GetPrimitiveArrayCritical()。规范中更易读的版本“Java™Native Interface:程序员指南和规范”在这里没有帮助,因为它是在JDK 1.3发布之前于1999年发布的。据我所知,在1.3中根本没有添加任何JNI方法 - 在规范中搜索字符串“1.3”只发现这个使用!
有没有人知道这个音符指的是什么?
答案 0 :(得分:1)
见Is there any way to pass a Java Array to C through JNI without making a copy of it?。答案是 new 函数是 GetPrimitiveArrayCritical()。它不保证不复制,但不需要固定来提供访问。
对链接问题的评论也是相关的:DirectBuffer 保证在任何VM上提供就地访问。