11

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

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数据丢失

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

感谢您的任何帮助!!!!!!!

4

3 回答 3

15

Java 使用垃圾收集来防止内存不足,方法是删除不再被任何类引用且无法从代码中访问的对象。

如果你有太多这些对象,你会得到很多 GC 调用,这有时可能会影响你的性能。另一方面,拥有一直被引用的对象,可能会阻止 GC 被调用(内存泄漏)并且您的内存可能会填满并且您会得到一个OutOfMemoryException.

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

于 2012-12-11T12:37:49.203 回答
4

这是 Android 的正常行为。手机只是进行垃圾收集。有关更多信息,请查看精彩的 Google I/O 视频: Google I/O 2011:Android 应用程序的内存管理

于 2012-12-11T13:28:45.997 回答