调用 JNI 函数时
Get<PrimitiveType>ArrayRegion
它始终保证返回一个 C 类型数组,该数组是原始 jarray 中指定区域的副本。
将原始数组的一个区域复制到缓冲区中的一系列函数。
这是否意味着我们应该调用
free()
或 delete []
它在我们之后返回的指针
完成了吗?
因为不像 Get
0
或 JNI_ABORT
时释放原始缓冲区,Get<PrimitiveType>ArrayRegion
似乎没有那个......所以我的问题是。
free
/ delete[]
Get<PrimitiveType>ArrayRegion
返回的指针吗?free
模式设置为delete[]
,我们是否应该
Get<PrimitiveType>ArrayElements
/Release<PrimitiveType>ArrayElements
由
JNI_COMMIT
返回的指针,因为这种模式也不释放缓冲区?
JNI_COMMIT 复制内容但不释放元素缓冲区
我们应该释放/删除[]
返回的指针吗?Get<PrimitiveType>ArrayRegion
号
操作是复制操作,将数组中的some数据复制到缓冲区中。它不“获取”或数组,也不返回指针。 (文档说返回类型是
void
。)
不像
Get<PrimitiveType>ArrayElements
,文档没有提到发布或免费的方法,任何需要发布或免费的东西。
如果我们将相应的
模式设置为Get<PrimitiveType>ArrayElements
,我们是否应该释放/删除[]由Release<PrimitiveType>ArrayElements
返回的指针,因为这种模式也不释放缓冲区?JNI_COMMIT
文档不是 100% 清楚,但我的阅读是你 do 在这种情况下需要释放/删除缓冲区。请注意,文档说明:
“其他选项 [例如
] 使程序员可以更好地控制内存管理,应格外小心使用。”JNI_COMMIT