我最近正在做很多JNI工作,并希望监视(或至少转储)jni globalref池的内容。谷歌尚未提供任何有用的信息。
我注意到如果你确实触发了一个globalref-pool耗尽,它确实列出了池中的前10个项目,所以我希望有一些方法可以解决这个问题。
答案 0 :(得分:4)
在Dalvik VM中,全局和(对于当前线程)本地引用表在dalvik/vm/Jni.cpp.中dvmDumpJniReferenceTables()
打印到日志中。dalvik/vm/native/dalvik_system_VMDebug.cpp从Dalvik_dalvik_system_VMDebug_dumpReferenceTables()
调用可以通过dalvik.system.VMDebug.dumpReferenceTables()
method。
批准的方式是通过android.os.Debug.dumpReferenceTables()
method来标记@hide
,即它不是公共API的一部分。所以你应该通过反思来调用它。
我不知道在ART下会发生什么。