San*_*eep 5 java java-native-interface
在 jni 中,我们有GetPrimitiveArrayElements
函数来获取指向堆上数组元素的指针并ReleasePrimitiveArrayElements
删除数组的本地副本。
但是我将 java 对象数组传递给 JNI。这些数组元素使用GetObjectArrayElement
函数迭代到本地 jobject。
但是如何在处理数组元素后删除 jobject 的本地引用。
谢谢
无论jobject
您获取的 s 最初是在 Java 端分配的还是由您的 JNI 方法分配的,只要没有对对象的延迟引用,它们就会被垃圾回收处理。因此,如果您对 s 的本地引用jobject
只是局部变量,它们将在函数末尾消失,并且您的对象将有资格在事件的正常原因中进行垃圾回收。如果您保留GlobalRef
对象,则该对象仍然存在,并且本地引用将像任何未分配堆空间的本地变量一样消失)。如果您保留 a WeakRef
,则该对象可能会被垃圾回收,但如果没有,它对于另一个 JNI 调用仍然有效。保留对跨 JNI 调用的普通本地引用jobject
是无效的。
jobject
另外,如果您想立即释放本地引用而不是等待(就像您在单个函数中创建大量引用一样,只需使用DeleteLocalRef(env, jobj);
JNIEnv.
无论如何,如果我犯了任何错误,文档应该告诉您您需要知道的一切。
归档时间: |
|
查看次数: |
7719 次 |
最近记录: |