gpt4 book ai didi

java - jni- 释放对象数组

转载 作者:搜寻专家 更新时间:2023-11-01 02:53:54 24 4
gpt4 key购买 nike

在 jni 中,我们有 GetPrimitiveArrayElements 函数来获取指向堆上数组元素的指针,还有 ReleasePrimitiveArrayElements 函数来删除数组的本地副本。

但是我将 java 对象数组传递给 JNI。这些数组元素使用 GetObjectArrayElement 函数迭代到本地 jobject。

但是如何在处理数组元素后删除作业对象的本地引用。

谢谢

最佳答案

无论您获取的jobject最初是在Java 端分配的还是由您的JNI 方法分配的,they will be handled by garbage collection只要没有对对象的挥之不去的引用。因此,如果您对 jobject 的局部引用只是局部变量,它们将在函数结束时消失,并且您的对象将有资格在事件的正常原因中进行垃圾回收。如果您为对象保留一个 GlobalRef,那么该对象将仍然存在并且局部引用将像任何未分配堆空间的局部变量一样消失)。如果您保留 WeakRef,该对象可能会被垃圾回收,但如果没有,它对另一个 JNI 调用仍然有效。在 JNI 调用中保留对 jobject 的普通本地引用是无效的。

此外,如果您想立即释放本地引用而不是等待(就像您在单个函数中创建大量 jobject 引用一样,只需使用 DeleteLocalRef(env , jobj); JNIEnv 的方法。

无论如何,the documentation如果我犯了任何错误,应该告诉你你需要知道的一切。

关于java - jni- 释放对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5658928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com