JNI 错误: 本地引用表溢出 512 个条目

2022-09-03 01:19:14

我的函数如下所示。它被执行了很多次。在某一点上,它在 jobject nvarObject = env->GetObjectField (var1, nvar1) 处崩溃,给出错误 JNI 错误:本地引用表溢出 512 个条目。

任何人都可以研究这个问题并提出一些光明。


答案 1

所有返回或类似对象引用的 JNI 方法都在引用表中创建本地引用。当您将控制权返回给 JVM 时,这些引用会自动清理,但是如果要创建许多引用(例如,在循环中),则需要手动清理它们。jobject

通过调用引用,您走在正确的轨道上,但请注意,这也返回了 ,因此在退出函数之前,也应该删除返回的引用。DeleteLocalRefclsGetObjectFieldjobject

此外,请确保在从错误条件返回之前清理任何现有引用!

另一种方法是:在循环中调用的函数的顶部,在返回的函数中的任何位置之前调用并调用。这将自动清理在该函数调用期间创建的任何引用。第二个参数是帧中所需的本地引用数 - 如果在函数执行期间需要超过 5 个本地引用,请使用大于 5 的值。PushLocalFrame( env, 5 )PopLocalFrame(env)


答案 2

推荐