Cómo escuchar eventos de GC en Android

¿De todos modos podemos monitorear eventos de GC como sucede en Android?

En Java, creo que podemos escuchar los eventos http://www.fasterj.com/articles/gcnotifs.shtml Pero las API de java.lang.management no están disponibles en Android.

Por qué quieres este oyente. Si simplemente desea saber si su aplicación se está quedando sin memoria, compruebe lo siguiente:

Liberar memoria a medida que la memoria se vuelve apretada

Durante cualquier etapa del ciclo de vida de la aplicación, la devolución de llamada onTrimMemory () también le indica cuándo la memoria general del dispositivo está baja. Debería responder liberando recursos adicionales basándose en los siguientes niveles de memoria suministrados por onTrimMemory ():

  • TRIM_MEMORY_RUNNING_MODERATE Su aplicación se ejecuta y no se considera eliminable, pero el dispositivo tiene poca memoria y el sistema está matando activamente los procesos en la caché LRU.
  • TRIM_MEMORY_RUNNING_LOW Su aplicación se está ejecutando y no se considera eliminable, pero el dispositivo se está ejecutando mucho más bajo en la memoria, por lo que debe liberar los recursos no utilizados para mejorar el rendimiento del sistema (lo que afecta directamente al rendimiento de la aplicación).
  • TRIM_MEMORY_RUNNING_CRITICAL Tu aplicación sigue en ejecución, pero el sistema ya ha eliminado la mayoría de los procesos en la caché LRU, por lo que deberías liberar todos los recursos no críticos ahora. Si el sistema no puede recuperar suficientes cantidades de RAM, borrará todo el caché LRU y comenzará a matar los procesos que el sistema prefiere mantener vivos, como los que alojan un servicio en ejecución. Además, cuando su proceso de aplicación está en caché, puede recibir uno de los siguientes niveles de onTrimMemory ():

  • TRIM_MEMORY_BACKGROUND El sistema tiene poca memoria y su proceso está cerca del principio de la lista LRU. Aunque el proceso de la aplicación no corra un alto riesgo de morir, es posible que el sistema ya esté destruyendo procesos en la caché LRU. Debe liberar recursos que sean fáciles de recuperar para que su proceso permanezca en la lista y se reanude rápidamente cuando el usuario regrese a su aplicación.

  • TRIM_MEMORY_MODERATE El sistema tiene poca memoria y su proceso está cerca de la mitad de la lista LRU. Si el sistema se vuelve más restringido por la memoria, existe la posibilidad de que su proceso sea destruido.
  • TRIM_MEMORY_COMPLETE El sistema tiene poca memoria y su proceso es uno de los primeros en ser eliminado si el sistema no recupera memoria ahora. Debe liberar todo lo que no es crítico para reanudar el estado de la aplicación. Debido a que la devolución de llamada onTrimMemory () se agregó en el nivel 14 de API, puede utilizar la devolución de llamada onLowMemory () como una alternativa para versiones anteriores, que es aproximadamente equivalente al evento TRIM_MEMORY_COMPLETE.

Aquí está el enlace de referencia https://developer.android.com/training/articles/memory.html

Bueno, será diferente para ambos dalvik y arte ..

Básicamente se puede instruir adb shell para grabar los eventos GC en un archivo de rastreo ..

Arte: https://source.android.com/devices/tech/dalvik/gc-debug.html

Podría incluso ser los mismos comandos adb para el arte y dalvik.

La herramienta de monitoreo de memoria se conecta a esto cuando muestra ese gráfico gráfico de memoria para usted en android studio.

Progammatically, probablemente es más difícil .. mirar cómo FB hizo sus herramientas de rendimiento como creo que están haciendo los conteos de eventos de GC desde el lado nativo de C / C ++ y la clasificación en un flatbuffer para su código de herramienta de perfil de perfil de Java para acceder ..

  • Fuga de memoria de Android ClassLoader
  • Android, veo que el montón crece, pero quiero que pare
  • LeakCanary detecta pérdida de memoria de Android WebView
  • SoftReference obtiene recolección de basura demasiado temprano
  • OnReceive Asynchronous Operations y recolección de basura
  • Garbage Collection causa: MediaPlayer finalizado sin ser lanzado
  • Recogida de basura GridView de Android (GC_EXTERNAL_ALLOC) <1K excesivamente, causando una interfaz de usuario muy intermitente
  • Formatea una dirección MAC en Android / Java sin crear basura innecesaria
  • ¿Cómo encontrar el origen de un GC_FOR_MALLOC?
  • Colección de cuerdas y basura
  • Android GC - LogCat siempre muestra actividad de GC
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.