java - 有没有办法转储/查看 jni globalref 池?

标签 java android android-ndk java-native-interface

我最近在做很多 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/

相关文章:

java - 与Tomcat 7相互认证

java - 如何在后台或 sleep 模式下采样加速度计数据

android - Android 麦克风到扬声器直接流媒体应用程序的音频延迟

android - 是否可以直接在 Android 中访问相机的 LED?

Java 规范 - "valid"优化的规则是什么

java - Spring Web Service REST API JSON 响应始终包含 boolean 值

android - 首次启动需要很长时间(ClassLoader 引用了未知路径)

android - 更新后生日数据被删除

Android 在不再可见时停止异步加载列表元素

c++ - 安卓NDK : undefined reference