Cómo ver los problemas de pérdida de memoria desde los registros
Hay muchas formas de generar archivos .hprof. Las diferentes versiones de Android tienen métodos ligeramente diferentes para generar archivos .hprof. La versión que uso es 2.1 y cada versión genera. hprof Consulte el método del archivo: .xxx.hprof-hptemp: Denegar permiso.
Si no tenemos tarjeta sd, o el proceso actual no tiene permiso para escribir en la tarjeta sd (como system_process), entonces podemos hacer esto:
6. programa, como en el marco En algún código, puede usar android.os.Debug: public static void dumpHprofData(String fileName) lanza el método IOException para especificar manualmente la ubicación donde se genera el archivo .hprof.
Por ejemplo: xxxButton.setOnClickListener(new View.OnClickListener() { public void onClick(Ver vista) { android.os.Debug.dumpHprofData("/data /temp/myapp.hprof"); . . ...}}
El propósito del código anterior es comenzar a capturar la información de uso de memoria cuando se hace clic en xxxButton y guardarla en la ubicación que especificamos: /data/temp/myapp.hprof. por lo que no es necesario utilizar sdcard debido a restricciones de permisos.
Pero asegúrese de que exista el directorio /data/temp. Puede definir esta ruta usted mismo o escribirla en una ruta en sdcard.
(2) Utilice MAT para importar archivos .hprof
1 Si el archivo .hprof es generado por eclipse, se puede abrir directamente mediante el complemento MAT (ADT más nuevo). puede admitir este complemento);
p>2. Si MAT no puede abrir el archivo .hprof generado por eclipse, puede abrirlo mediante el archivo android.hprof o el archivo android.hprof si el .hprof se genera manualmente usando el método android.os.Debug.dumpHprofData(), necesita convertir el archivo .hprof. El método de conversión es el siguiente: Por ejemplo, copiaré el archivo .hprof a la PC. /ANDROID_SDK/tools y luego ingrese el comando hprofconv xxx.hprof yyy.hprof, donde xxx.hprof es el archivo original, yyy.hprof es el archivo convertido. El archivo convertido se colocará automáticamente en el directorio /ANDROID_SDK/tools. Bien, el procesamiento del archivo .hprof se completa y se puede utilizar para analizar pérdidas de memoria.
3 En Eclipse, haga clic en Windows->Abrir perspectiva->Otro->Analizador de memoria, o reproduzca el Analizador de memoria. RCP de la herramienta En MAT, haga clic en Archivo->Abrir archivo, busque el archivo que acaba de convertir y luego importe el archivo recién obtenido
(3) Utilice la herramienta de visualización de MAT para analizar la memoria. p>
Después de importar el archivo .hprof, MAT analizará automáticamente el archivo y generará un informe. Haga clic en el árbol Dominator y agrupe por paquete, haga clic derecho en la clase de paquete que definió y seleccione Listar objetos->Con referencias entrantes en el menú emergente.
Cuando haya referencias entrantes, se enumerarán todas las clases sospechosas. Haga clic derecho en un proyecto y seleccione Ruta a GC Roots -> Excluir referencias débiles/blandas, lo que filtrará aún más todas las clases relacionadas con el programa que tienen pérdidas de memoria. Por lo tanto, puede rastrear la clase específica en su código que está causando la fuga.
La interfaz de MAT se muestra a continuación.
Dado que hay instrucciones detalladas en el sitio web oficial de MAT y en los archivos de ayuda del cliente, los detalles de cómo analizar no se explicarán aquí. Es importante comprender el papel de cada vista en MAT, consulte www.eclipse.org/mat/about/screenshots.php.
En resumen, la idea básica de usar MAT para analizar la memoria y encontrar pérdidas de memoria es descubrir qué referencias de objetos de clase no se publican y por qué no se publican, para que pueda averiguarlo fácilmente. cual hay un problema con la lógica del código.
Además, durante el proceso de prueba, primero debe analizar cómo la ejecución de la aplicación producirá pérdidas de memoria y luego tomar el archivo hhprof generado con la herramienta MAT para analizarlo durante la ejecución continua. En la actualidad, existen varios métodos que entiendo para ver la memoria y analizar las pérdidas de memoria:
1. Utilice el comando superior para ver la memoria del proceso. Por ejemplo, cree un archivo de script music.sh. El contenido del archivo es especificar el programa para generar el uso de memoria de un proceso cada segundo. La implementación específica es la siguiente:
#! /bin/bash
mientras es verdadero; hacer
adb shell procrank | grep "com.android.music"
dormir 1
hecho
Al utilizar la utilidad procrank, puede ver el uso de memoria por segundo del proceso de música.
2. Además, también puedes usar el comando top para ver la memoria, de la siguiente manera:
adb shell top -m 10. (Ver los 10 procesos que más ocupan recursos)
adb shell top|grep com.android.music (verifique la memoria del proceso de música)
3..comando gratuito
gratis p>
1. El comando sin rol se utiliza para mostrar el uso de memoria bajo todos los permisos del usuario.
2.Formatfree [-b|-k|-m] [-o] [-s retardo] [-t] [-V]
3.Parámetros principales -b -k -m: muestra el uso de memoria en bytes (KB, MB).
-s delay: Muestra el uso de la memoria en segundos.
-t: Muestra la columna de suma de memoria.
-o: No muestra la columna de ajuste del buffer.
4. Ejemplos de aplicaciones El comando gratuito es el comando principal utilizado para ver el uso de la memoria. En comparación con el comando superior, su ventaja es que es fácil de usar y ocupa muy pocos recursos del sistema. Con el parámetro -S, puede utilizar el comando gratuito para monitorear continuamente el uso de la memoria para un monitoreo conveniente en tiempo real.
#free -b -s5 Con este comando, el terminal informará continuamente el uso de la memoria (en bytes), actualizado cada 5 segundos.