一段时间以来一直在 NDK 端使用 java.nio.ByteBuffers - 注意到这篇关于 Android 与 JNI、GC 和 ICS 未来的关系的文章。文章在这里http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html
所以......这是关注点:
由于 JNI 提供的“指针”实际上似乎是由 JNI 内部管理的引用 - 如果在传递之前未在 JNI 方法中将其标记为 NewGlobalReference(),则它可能会在某个时候被 GC“移动”或删除到 C++ 类?
在我的 JNI 方法中,我获取直接缓冲区地址并将其传递给使用它的类,而无需任何
env->NewGlobalRef(jobject);
env->NewLocalRef(jobject);
env->DeleteGlobalRef(jobject);
管理。
现在一切正常 - 但它正确吗?
想法?
PS - 我确实在 C++ 的退出/析构函数上使用了 free(ByteBuffer)