1

我在我的 JNI 代码中看到了这个警告:

JNI WARNING: 0x44be7258 is not a valid JNI reference

我将 JNI 中 FindClass 方法返回的 LocalReference 分配给构造函数中的类成员变量:

标题:

...
jclass m_class;

价格:

m_class = env->FindClass( classSignature );

FindClass 是否返回 LocalReference 并将其存储在我的类成员变量中是无效的?

4

1 回答 1

2

来自梁书,第 5.1.1 章“本地参考”

大多数 JNI 函数创建本地引用...本地引用仅在创建它的本地方法的动态上下文中有效,并且仅在本地方法的一次调用中有效。在本地方法执行期间创建的所有本地引用将在本地方法返回后被释放。

随后是一个非法代码示例,它完全使用了您的方法FindClass。换句话说,是的,FindClass返回一个本地引用。下一章是一个创建全局引用的示例,它可以按照您想要的方式使用。DeleteGlobalRef当你不再需要它时不要忘记。否则 JVM 不能 GC 并且你的程序会泄漏。

于 2012-08-10T20:53:42.250 回答