我想知道为什么每次运行任何应用程序时都会出现下面的消息。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中。
谢谢你的帮助!!!!!!!!
最佳答案
垃圾收集被Java使用,通过删除不再被任何类引用并且无法从代码中获取的对象来阻止您走出内存。
如果这些对象太多,则会经常收到gc调用,这有时可能会影响性能。另一方面,拥有一直被引用的对象可能会阻止调用gc(内存泄漏),并且内存可能会填满,从而得到OutOfMemoryException
。
您的目标不是消除gc,而是尽可能减少对延迟敏感并且在ui线程上运行的方法(如onDraw()
,getView()
,…例如)。