为什么在运行应用程序时它始终在Android Logcat中显示GC_CONCURRENT FREED和GC_CONCURRENT ALLOCATE?

时间:2012-12-11 11:54:11

标签: android memory-management memory-leaks garbage-collection android-logcat

我想知道为什么每次运行任何应用程序时都会显示以下消息。

12-11 17:18:37.141: D/dalvikvm(3155): GC_CONCURRENT freed 485K, 9% free 6696K/7303K, paused 9ms+335ms

paused 9ms+335ms由于此暂停,我应该播放的音频丢失,因为根据我的代码,它每隔40ms接收一次音频数据,所以此处暂停9ms+335ms 10 times {1}}数据丢失

我知道它正在执行某种垃圾收集,但我的问题是为什么它经常出现在logcat中。

感谢您提供任何帮助!!!!!!

3 个答案:

答案 0 :(得分:15)

Java使用垃圾收集来防止您通过删除任何类不再引用但无法从您的代码访问的对象而导致内存不足。

如果你有太多这些对象,你会得到很多GC调用,这可能在某些时候会影响你的表现。另一方面,拥有始终引用的对象可能会阻止GC被调用(内存泄漏)并且您的内存可能会被填满并且您获得OutOfMemoryException

您的目标不是消除GC,而是在延迟敏感且在UI线程上运行的方法中尽可能地减少GC(例如onDraw()getView(),... )。

答案 1 :(得分:4)

这是Android的正常行为。手机只是垃圾收集。 有关详细信息,请查看优秀的Google I / O视频: Google I/O 2011: Memory management for Android Apps

答案 2 :(得分:1)