studio - Tabla de referencia local JNI de Android, estado actual de volcado
jni android (3)
En caso de que alguien necesite hacer algo similar, puede usar dumpReferenceTables desde dalvik.system.VMDebug
Cualquier desarrollador de Android JNI debe estar familiarizado con este maravilloso mensaje en logcat. Mi pregunta es: ¿cómo puedo decirle a la máquina virtual que descargue el estado actual de la tabla? Lo necesito para fines de depuración para asegurarme de que los subprocesos nativos en la salida no tengan referencias locales pendientes.
Todo el crédito para Pavel, pero pensé que a otros les gustaría el código de ejemplo:
jclass vm_class = env->FindClass("dalvik/system/VMDebug");
jmethodID dump_mid = env->GetStaticMethodID( vm_class, "dumpReferenceTables", "()V" );
env->CallStaticVoidMethod( vm_class, dump_mid );
Intento el código a continuación. Funciona bien.
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): volcado de tabla de referencia global:
I / art (28913): Últimas 10 entradas (de 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 byte [] (2710656 elementos)
I / art (28913): 262: 0xa284d000 byte [] (30276 elementos)
I / art (28913): 261: 0xa2855000 byte [] (19312 elementos)
I / art (28913): 260: 0xa1e3b000 byte [] (6529728 elementos)
I / art (28913): 259: 0x12e1ca60 android.view.accessibility.AccessibilityManager $ 1
I / art (28913): 258: 0x12df2c70 android.content.ContentProvider $ Transporte
I / art (28913): 257: 0x12ed4040 java.lang.ref.WeakReference
I / art (28913): Resumen:
I / art (28913): 2 de android.opengl.EGLContext (2 instancias únicas)
I / art (28913): 1 de android.hardware.display.DisplayManagerGlobal $ DisplayManagerCallback
I / art (28913): 223 de java.lang.Class (172 casos únicos)
I / art (28913): 2 de android.opengl.EGLDisplay (2 instancias únicas)
I / art (28913): 2 de java.lang.ThreadGroup (2 instancias únicas)
I / art (28913): 2 de android.opengl.EGLSurface (2 instancias únicas)
I / art (28913): 1 de dalvik.system.VMRuntime
I / art (28913): 1 de android.content.ContentProvider $ Transport
I / art (28913): 1 de dalvik.system.PathClassLoader
I / art (28913): 1 de android.view.accessibility.AccessibilityManager $ 1
I / art (28913): 1 de android.app.ActivityThread $ ApplicationThread
I / art (28913): 2 de byte [] (100 elementos) (2 instancias únicas)
I / art (28913): 7 de byte [] (8192 elementos) (7 instancias únicas)
I / art (28913): 1 de byte [] (19312 elementos)
I / art (28913): 1 de byte [] (30276 elementos)
I / art (28913): 1 de byte [] (2710656 elementos)
I / art (28913): 1 de byte [] (6529728 elementos)
I / art (28913): 2 de java.lang.String (2 instancias únicas)
I / art (28913): 15 de java.lang.ref.WeakReference (15 instancias únicas)