如何查看JNI本地引用表?

7

有没有办法查看JNI本地引用表的内容?

如果溢出时崩溃,通过Android LogCat可以看到它,并且有关于引用对象、唯一实例等大量信息,这有助于捕获潜在的内存泄漏。

谢谢。


我不确定我理解你的问题,可能是因为你遇到了JNI崩溃,并想找出堆栈跟踪中地址对应的源代码行,那么看一下如何在Android中使用addr2line的答案是否有帮助? - Raimo Ihle
1
不行。如果我遇到崩溃,我可以像这个问题中那样查看表格Android NDK overflows。我想知道,在我的应用程序正常工作期间是否可以查看此引用表。 - Frederic Blase
1
为什么?这对你有什么好处?你会根据其内容执行不同的代码吗?我认为你真正需要的是 PushLocalFrame()PopLocalFrame() - user207421
@EJP 不,我想要检查我的代码如何工作并在有许多未使用的本地引用时进行改进,以防止未来溢出。感谢Push/PopLocalFrame,但这仍不是我要寻找的。 - Frederic Blase
你怎么可能有未使用的本地引用?如果确实存在,那么Push/PopLocalFrame为什么不是一个足够的解决方案呢? - user207421
例如,我在循环中创建了许多jobject对象-它们应该在变得无引用时被垃圾收集器释放,但这可能需要一些时间,因此表格会溢出。PopLocalFrame会销毁所有本地对象,而不仅仅是无引用的对象。 - Frederic Blase
1个回答

1
请参考CheckJNI。它可以捕获许多常见错误。对于ICS,如果在您的Manifest.xml中debuggable="true",则默认启用CheckJNI。
谢谢。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接