我最近在做很多 JNI 工作,想监视(或至少转储)jni globalref 池的内容。 Google 尚未提供任何有用信息。
我注意到,如果您确实触发了 globalref-pool 耗尽,它会列出池中的前 10 项,所以我希望有某种方法可以做到这一点。
最佳答案
在 Dalvik VM 中,全局和(对于当前线程)本地引用表由 dalvik/vm/Jni.cpp. 中的 dvmDumpJniReferenceTables()
打印到日志中。这是从 dalvik/vm/native/dalvik_system_VMDebug.cpp 中的 Dalvik_dalvik_system_VMDebug_dumpReferenceTables()
调用的,可通过 dalvik.system.VMDebug.dumpReferenceTables()
从 Java 源代码访问 method .
批准的调用方式是通过 android.os.Debug.dumpReferenceTables()
method ,标记为 @hide
,即它不是公共(public) API 的一部分。所以你应该通过反射来调用它。
我不知道这在 ART 下是否有任何作用。
关于java - 有没有办法转储/查看 jni globalref 池?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27146953/