当前位置: 首页 > 面试题库 >

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

秦景同
2023-03-14
问题内容

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

任何人都可以调查这个问题并提出一些建议。


问题答案:

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

通过调用引用,您处在正确的轨道DeleteLocalRefcls,但是请注意,它GetObjectField还会返回一个jobject,因此在退出该函数之前,也应删除在此返回的引用。

从错误情况返回之前,还请确保清除所有现有引用!

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



 类似资料:
  • 我们最近推出了我们的应用程序和升级实际上从以前的版本… 突然间,我们开始在大量的设备中看到这个错误...我们不知道发生了什么,日志也很模糊... 在这里附上日志。但任何帮助或一些线索可能会帮助我们调试问题。 修订:'10' ABI:“ARM64” PID:31610,TID:31610,名称:st.mediaManager>>><<< 中止消息:“sart/runtime/indirect_ref

  • 我试图使用javamail示例包中的ShowMsg.java读取gmail消息,但在运行时不断出现此错误。虽然程序编译得很好。 以下是错误消息: 我运行的命令是,编译它的命令是。javax.mail.jar包含在lib文件夹中 这是一些更短的替代代码,并得到相同的错误:

  • 问题内容: 下面给出的代码显示了运行时的Stackoverflow错误。但是,如果我使另一个类CarChange创建Car的对象,它将成功运行。我是一个初学者,请执行以下代码以了解在Java中进行向上转换的重要性。 问题答案: 一个stackoverflow通常意味着您有一个无限循环。 收到此消息的原因是因为您从testdrive方法调用驱动器,并且在该方法中再次调用drive。

  • 问题内容: 我在网上搜索过,找不到适合此问题的解决方案 导致此异常的代码 我想知道发生此异常的实际原因,有人说该日期不在有效范围内,但对我来说这没有任何意义,如果可以的话,可以是一个范围。是否取决于我们使用的系统。也想知道这个问题的一个好的解决方案。 谢谢。 问题答案: 从平台的C库调用基础函数。例如,您发布的上述代码对我来说在Mac OS X上运行得很好,尽管它返回的数字是负数,因为日期早于Un

  • 我读过几篇关于JNI本地和全球的参考文献。但是我找不到一个明确的答案,作为参数传递给JNI函数的Java对象是局部引用还是全局引用。我认为它应该是全球性的,但是有一个问题: 首先,我获取Java对象指针并保存它。然后,本机回调函数调用该对象的方法。回调函数是从单独的线程调用的。线程是使用AttachCurrentThread()创建的,因此JVM知道它。JNIEnv*变量也是有效的,对象没有被垃圾

  • 问题内容: TL; DR: 将任何非内置函数添加到Array.prototype AND Function.prototype将导致IE8本机JSON解析器在解析包含数组的任何JSON时发生堆栈溢出,但仅当您还传递了reviver函数时放入JSON.parse()。 最初这是一个问题,但我回答了我自己的原始问题,所以现在我要问:有人能想到此IE8错误的解决方法,该方法不涉及消除所有修改Array.