Estoy instrumentando la VM Dalvik y me gustaría saber si hay alguna herramienta para analizar la recolección de basura en dalvik. Sé sobre el rastreador de asignación, pero estoy buscando algo más elaborado.Herramienta de recolección de basura para dalvik
Respuesta
Obtener un registro de todas las operaciones de GC con el tiempo:
Cada vez que un GC se lleva a cabo, se obtiene una línea en su LogCat.
08-08 16:42:21.998: D/dalvikvm(26942): GC_CONCURRENT freed 773K, 26% free 4739K/6368K, paused 4ms+3ms, total 92ms
08-08 16:42:21.998: D/dalvikvm(26942): WAIT_FOR_CONCURRENT_GC blocked 11ms
Parece que estoy obteniendo esos para todas las aplicaciones en mi dispositivo.
Esta línea incluye muchas estadísticas interesantes sobre el GC como la cantidad de memoria liberada, cuánto tiempo tomó el GC, cuándo sucedió exactamente y el tamaño del montón (usado/total).
Dado que todas esas líneas de registro tienen la etiqueta dalvikvm
, debería ser capaz de recolectarlas y filtrarlas durante un período prolongado y analizarlas para conocer el comportamiento del GC.
Analizando una carrera específica de la GC:
Si desea analizar lo que sucede en una operación específica GC, la mejor herramienta para el trabajo es Eclipse MAT. Eclipse MAT puede analizar volcados de pila. Realice una instantánea de almacenamiento dinámico, espere el GC (o actívelo con DDMS) y luego tome otra instantánea.
Eclipse MAT puede mostrarle el delta entre las dos instantáneas. Observe que verá nuevas asignaciones y desasignaciones causadas por GC. Más información sobre cómo comparar instantáneas es available here.
Algunos otros pensamientos:
no estoy seguro de cuánto sería capaz de aprender de análisis del proceso de GC. El funcionamiento interno del GC es un detalle de implementación. Puede cambiar sin previo aviso entre las versiones/dispositivos/configuraciones del sistema operativo.
Estoy tratando de pensar en formas de mejorar la latencia del GC que está experimentando .. Me parece que el GC por lo general se ejecuta cuando las condiciones de memoria son bajas. Esto probablemente ocurra durante nuevas asignaciones, por lo tanto, el GC podría estar ejecutándose mientras su servicio esté activo. Quizás, si usa el tiempo que su servicio está inactivo para GC manualmente, podría reducir el número de GC que ocurren en la ruta crítica de responder a una solicitud web. Para probar eso, agregaría un temporizador de fondo simple y lo restablecería cada vez que mi servicio se active (solicitud nueva). Cuando el temporizador marque (inactividad por algún período de tiempo), ejecutaría System.gc()
manualmente.
- 1. Recolección de basura en dalvik vm
- 2. y recolección de basura
- 3. Recolección de basura
- 4. Retraso de recolección de basura?
- 5. ¿Notificación de recolección de basura?
- 6. recolección de basura de java
- 7. JVM sin recolección de basura
- 8. ¿WinRT tiene recolección de basura?
- 9. Recolección de basura en Delphi
- 10. multiprocesamiento y recolección de basura
- 11. ¿Deberíamos utilizar la recolección de basura "estación de trabajo" o la recolección de basura "servidor"?
- 12. Node.js y V8 de recolección de basura
- 13. Uso de la recolección de basura?
- 14. Supresión de la recolección de basura C#
- 15. ¿Trabajador de fondo y recolección de basura?
- 16. extremadamente largos tiempos de recolección de basura
- 17. Recolección de basura de los miembros estáticos
- 18. Patrones inusuales de recolección de basura
- 19. Recolección de basura de campos privados
- 20. Ruby Class objeto recolección de basura
- 21. ¿Qué desencadena una recolección de basura gen2?
- 22. Forzar recolección de basura en AS3?
- 23. Recolección de basura en hilos Perl
- 24. Javascript recolección de basura función anónima
- 25. C# Recolección de basura Active Roots
- 26. referencia interna impide la recolección de basura
- 27. Java no recolección de basura memoria
- 28. Cómo depurar la Recolección de basura .net?
- 29. ¿NewLISP usa la recolección de basura?
- 30. Recolección de basura, ¿debemos confiar en ella?
Creo que DDMS te ayudará. –
¿Qué problema estás tratando de resolver? –
Estoy ejecutando un servicio en segundo plano en mi dispositivo que olfatea el tráfico web y actúa como un proxy para otras aplicaciones web en el dispositivo. Mi problema es que el recolector de basura toma mucho más tiempo que la ejecución normal. Esto hace que el servicio en segundo plano se bloquee, lo que a su vez conduce a una respuesta web lenta para la aplicación. Estoy tratando de ver este comportamiento abrupto del recolector de basura. – 22kar