Android JNI本地参考表,转储当前状态

 2023-01-20    281  

问题描述

任何Android JNI开发人员都应熟悉LogCat中的此精彩信息.我的问题是:如何告诉VM转储当前表状态?我需要它用于调试目的,以确保出口的本机线程没有出色的本地参考.

推荐答案

如果有人需要做类似的事情,您可以使用
dalvik.system.vmdebug

Android JNI本地参考表,转储当前状态

的dmplyReferencetables

其他推荐答案

Pavel的全部信用,但我认为其他人可能会喜欢示例代码:

jclass vm_class= env->FindClass("dalvik/system/VMDebug");
jmethodID dump_mid = env->GetStaticMethodID( vm_class, "dumpReferenceTables", "()V" );
env->CallStaticVoidMethod( vm_class, dump_mid );

其他推荐答案

我在下面尝试代码.

try {
    Class cls = Class.forName("android.os.Debug");
    Method method = cls.getDeclaredMethod("dumpReferenceTables");
    Constructor con= cls.getDeclaredConstructor();
    con.setAccessible(true);
    method.invoke(con.newInstance());
    //call method dumpReferenceTables of dalvik.system.VMDebug
    //to dump reference table at last.
}
catch(Exception e){
    Log.i(TAG,"exception="+e.getMessage());
}

i/art(28913):全局参考表转储:

i/art(28913):最后10个条目(共267个):

i/art(28913):266:0x12e340c0 java.lang.ref.weakreference

i/art(28913):265:0x12e34060 java.lang.ref.weakreference

i/art(28913):264:0x12e24220 java.lang.ref.weakreference

i/art(28913):263:0xa1ba5000字节[](2710656元素)

i/art(28913):262:0xa284d000 byte [](30276元素)

i/art(28913):261:0xA2855000字节[](19312元素)

i/art(28913):260:0xa1e3b000 byte [](6529728元素)

i/art(28913):259:0x12e1ca60 android.view.accessibility.Accessmanager $ 1

i/art(28913):258:0x12df2c70 android.content.contentprovider $ transport

i/art(28913):257:0x12ED4040 java.lang.ref.weakreference

i/art(28913):摘要:

i/art(28913):android.opengl.eglcontext(2个唯一实例)

i/art(28913):1 of android.hardware.display.displaymanagerglobal $ displayManagerCallback

i/art(28913):java.lang.class(172个唯一实例)

223

i/art(28913):android.opengl.egldisplay(2个唯一实例)

i/art(28913):java.lang.threadgroup(2个唯一实例)

i/art(28913):android.opengl.eglsurface(2个唯一实例)

i/art(28913):dalvik.system.vmruntime

的1

i/art(28913):android.content.contentprovider $ transport

i/art(28913):dalvik.system.pathclassloader

的1

i/art(28913):1 of android.view.Accessibility.Accessmanager $ 1

i/art(28913):1 of android.app.activitythread $ applicationThread

i/art(28913):2个字节[](100个元素)(2个唯一实例)

i/art(28913):7个字节[](8192个元素)(7个唯一实例)

i/art(28913):1 byte [](19312个元素)

i/art(28913):1个字节[](30276元素)

i/art(28913):1个字节[](2710656元素)

i/art(28913):1个字节[](6529728元素)

i/art(28913):java.lang.string(2个独特实例)

2

i/art(28913):java.lang.ref.weakreference(15个独特实例)

15

以上所述是小编给大家介绍的Android JNI本地参考表,转储当前状态,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26009.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。