2023-01-20 314
运行代码时,我会遇到一个错误:”添加到JNI本地参考表有512个条目”
这是我的代码:
jstring pJNIData = pJNIEnv->NewStringUTF ( variables[0].GetStringValue() );
pJNIEnv->CallStaticVoidMethod ( pJNIActivityClass, pJNIMethodIDStartTime, pJNIData ) ;
pJNIEnv->DeleteLocalRef(pJNIData);
我读过几个建议,但它们都没有工作!尽管有DeleteLocalRef,但它仍无法正常工作.该函数用于从字面上调用所有函数…
的参考器中
当JNI方法称为Java代码时,我已经看到了这一点(在我的情况下,该方法不是静态的).据我了解,未使用的本地引用是 不是 自动从JNI调用JAVA方法时自动删除(我的意思是,直到顶级JNI函数返回).
iirc,要么已经有关于日志中内存对象的信息,要么我可以添加一些日志记录.从这些信息中,我确定了我以前没有提及的垃圾项目.它们是两个阵列和一个课程,在随后的电话中创建,但不是垃圾收集的.
// in a function that calls a Java method from JNI
jbyteArray srcArray = env->NewByteArray(len);
jclass cls = env->FindClass("com/something/MyClass");
jmethodID mid = env->GetMethodID(cls, "mymethod", "([BI)[B");
jbyteArray resArray = (jbyteArray)env->CallObjectMethod(obj, mid, srcArray, XXXX);
...
env->DeleteLocalRef(cls);
env->DeleteLocalRef(resArray);
env->DeleteLocalRef(srcArray);
// no need to do anything with mid
请注意,尽管这三个局部参考的获取方式不同,但它们都在闲逛.
.
有用的链接:
(或找到Dalvik VM Docs Dalvik/Docs/JNI-TIPS.html并找到”>
JNI返回的每个对象都是”本地参考”.这意味着它对当前线程中当前本机方法的持续时间有效.即使对象本身在本机方法返回之后继续保持生存,引用也无效.这适用于包括JCLASS和JARRAY在内的所有子类. […]注意:方法和字段ID只是32位标识符,而不是对象引用,不应传递给NewGlobalRef.诸如getTringutfchars和getByTearRayements之类的函数返回的原始数据指针也不是对象.
我想我会在其他任何人遇到这个问题的情况下芯片.这是一个奇怪的情况,使我感到困惑几个小时!
好的,所以我有一个NDK应用程序,而被调用的Java代码在运行时加载的APK中.我不知道运行时加载是否以任何方式效果,但我认为我应该提到它.
现在,在C ++方法中,我使用查找类和getMethodid将强制器获取到hashmap,并称其为获得新的hashmap实例.然后,我使用JNI调用从C ++侧填充哈希图.到目前为止,一切都很好.
然后,我将hashmap传递给Java Code,并且再次按预期工作. Java代码返回后,我将在哈希姆普上调用DeletelocalRef.没有错误,但没有删除参考.
这只有当我最终超过512个本地引用(来自多个调用此功能)时才会出现,而错误转储显示LocalRef商店中的最后10个项目几乎都是hashmaps.我知道,当我制作多线程NDK应用程序时,GC不会在方法的末尾收集这些参考.但是,DeletelocalRef应该有效.
修复程序:
最后,我发现创建从JNI调用到我写的Java方法的hashmap很好,然后引用是免费的.拥有一个Java功能,这似乎很疯狂,该功能实际上只是返回了一个新的哈希图,但是现在我已经使用它了:)
以上所述是小编给大家介绍的即使在删除LocalRef后,jni表仍然溢出。,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!
原文链接:https://77isp.com/post/26123.html
=========================================
https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。
数据库技术 2022-03-28
网站技术 2022-11-26
网站技术 2023-01-07
网站技术 2022-11-17
Windows相关 2022-02-23
网站技术 2023-01-14
Windows相关 2022-02-16
Windows相关 2022-02-16
Linux相关 2022-02-27
数据库技术 2022-02-20
抠敌 2023年10月23日
嚼餐 2023年10月23日
男忌 2023年10月22日
瓮仆 2023年10月22日
簿偌 2023年10月22日
扫码二维码
获取最新动态