如何在Android上启用详细GC?

时间:2014-08-13 14:13:44

标签: java android debugging garbage-collection

由于神秘的原因,我正在调试发生大量GC的问题(即许多GC_CONCURRENT,WAIT_FOR_CONCURRENT_GC和GC_FOR_ALLOC消息出现在logcat中)。从日志中抽取一小部分:

08-13 08:59:12.051  25878-25932/com.myco.myapp D/dalvikvm﹕ GC_FOR_ALLOC freed 393K, 6% free 9740K/10344K, paused 11ms, total 12ms
08-13 08:59:12.067  25878-25882/com.myco.myapp D/dalvikvm﹕ GC_CONCURRENT freed 375K, 6% free 9750K/10344K, paused 3ms+2ms, total 16ms
08-13 08:59:12.067  25878-25932/com.myco.myapp D/dalvikvm﹕ WAIT_FOR_CONCURRENT_GC blocked 9ms
08-13 08:59:12.082  25878-25932/com.myco.myapp D/dalvikvm﹕ GC_FOR_ALLOC freed 380K, 6% free 9744K/10344K, paused 12ms, total 12ms
08-13 08:59:12.106  25878-25932/com.myco.myapp D/dalvikvm﹕ GC_FOR_ALLOC freed 375K, 6% free 9740K/10344K, paused 19ms, total 19ms
08-13 08:59:12.137  25878-25882/com.myco.myapp D/dalvikvm﹕ GC_CONCURRENT freed 379K, 6% free 9745K/10344K, paused 4ms+3ms, total 23ms
08-13 08:59:12.145  25878-25932/com.myco.myapp D/dalvikvm﹕ WAIT_FOR_CONCURRENT_GC blocked 20ms
08-13 08:59:12.168  25878-25932/com.myco.myapp D/dalvikvm﹕ GC_FOR_ALLOC freed 369K, 6% free 9743K/10344K, paused 17ms, total 18ms
08-13 08:59:12.192  25878-25932/com.myco.myapp D/dalvikvm﹕ GC_FOR_ALLOC freed 380K, 6% free 9740K/10344K, paused 17ms, total 17ms
08-13 08:59:12.207  25878-25932/com.myco.myapp D/dalvikvm﹕ GC_FOR_ALLOC freed 375K, 6% free 9743K/10344K, paused 11ms, total 11ms

我想知道在这样的卷中创建了哪些对象,GC必须经常运行。我想在GC期间看到哪些物体被摧毁。

在桌面系统上,我相信在JVM中启用-verbose:gc可以解决问题。是否可以在Android上启用详细GC?我如何看待GC正在摧毁什么?

1 个答案:

答案 0 :(得分:1)

您可能希望在Android监视器中跟踪分配以查看正在进行的操作。有关调试应用分配的详细信息,请参阅https://developer.android.com/tools/debugging/debugging-memory.html

enter image description here

另请查看过去关于Android内存管理的Google I / O的视频:https://www.youtube.com/watch?v=_CruQY55HOk