gpt4 book ai didi

java - JNI 错误 : Local reference table overflow 512 entries

转载 作者:IT老高 更新时间:2023-10-28 21:43:52 25 4
gpt4 key购买 nike

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

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

最佳答案

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

您在 cls 引用上调用 DeleteLocalRef 是正确的,但请注意 GetObjectField 也返回一个 jobject ,所以在退出函数之前应该删除返回的引用。

还要确保在从错误条件返回之前清理所有现有引用!

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

关于java - JNI 错误 : Local reference table overflow 512 entries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20917777/

25 4 0