2

我在 LogCat 中收到大量 GC_CONCURRENT 释放的消息,它们不是来自我自己的应用程序(我强制关闭了我的应用程序以确保)。释放的内存非常一致(大约 1430K),每秒大约发生 6 次。

我该如何解决这个问题?

它干扰了我的应用程序开发,因为它会淹没 LogCat 并将有价值的日志语句从缓冲区中强制输出,并且还会导致 LogCat “抖动”,因为每次 GC_CONCURRENT 事件发生时,会话过滤器都会上下跳动一行。

该手机是运行 Android 2.3.5 的摩托罗拉 Atrix 2。我只将手机用于开发,因此它几乎没有其他应用程序,而不是来自 AT&T 的股票过时软件。

11-14 10:50:14.117: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4712K/9671K, external 2357K/2773K, paused 3ms+3ms
11-14 10:50:14.273: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4714K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:14.429: D/dalvikvm(724): GC_CONCURRENT freed 1431K, 52% free 4712K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:14.585: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4714K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:14.742: D/dalvikvm(724): GC_CONCURRENT freed 1428K, 52% free 4714K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:14.898: D/dalvikvm(724): GC_CONCURRENT freed 1430K, 52% free 4713K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:15.054: D/dalvikvm(724): GC_CONCURRENT freed 1427K, 52% free 4714K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:15.210: D/dalvikvm(724): GC_CONCURRENT freed 1432K, 52% free 4711K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:15.367: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4712K/9671K, external 2357K/2773K, paused 3ms+2ms
11-14 10:50:15.523: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4714K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:15.679: D/dalvikvm(724): GC_CONCURRENT freed 1432K, 52% free 4711K/9671K, external 2357K/2773K, paused 3ms+3ms
11-14 10:50:15.835: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4712K/9671K, external 2357K/2773K, paused 3ms+2ms
11-14 10:50:15.992: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4714K/9671K, external 2357K/2773K, paused 2ms+2ms
11-14 10:50:16.148: D/dalvikvm(724): GC_CONCURRENT freed 1429K, 52% free 4713K/9671K, external 2357K/2773K, paused 3ms+3ms
11-14 10:50:16.304: D/dalvikvm(724): GC_CONCURRENT freed 1429K, 52% free 4712K/9671K, external 2357K/2773K, paused 3ms+3ms
11-14 10:50:16.460: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4714K/9671K, external 2357K/2773K, paused 2ms+3ms
11-14 10:50:16.617: D/dalvikvm(724): GC_CONCURRENT freed 1430K, 52% free 4713K/9671K, external 2357K/2773K, paused 3ms+3ms
11-14 10:50:16.773: D/dalvikvm(724): GC_CONCURRENT freed 1429K, 52% free 4712K/9671K, external 2357K/2773K, paused 3ms+3ms
11-14 10:50:16.929: D/dalvikvm(724): GC_CONCURRENT freed 1426K, 52% free 4714K/9671K, external 2357K/2773K, paused 3ms+3ms
4

1 回答 1

4

进程 ID 显示在消息中(在上面,它是 pid 724)。您可以使用adb shell ps获取 Linux 进程转储;找到 pid 724 的条目以查看它是哪个应用程序。

或者,如果您使用的是开发人员设备,则可以在 Eclipse/ADT/DDMS 中打开“设备”视图并查看所有进程。选择具有匹配 pid 的应用程序(第二列),然后打开“线程”视图。这显示了应用程序中的所有线程。在“utime”和“stime”列中寻找具有高值的线程。如果您双击它几次,您将看到堆栈跟踪的快照,这可能表明导致所有 GC 的原因。

于 2012-11-14T21:46:58.810 回答