【问题标题】:Why does it always shows GC_CONCURRENT FREED and GC_CONCURRENT ALLOCATE in Android Logcat while running a app?为什么在运行应用程序时,Android Logcat 中总是显示 GC_CONCURRENT FREED 和 GC_CONCURRENT ALLOCATE?
【发布时间】:2012-11-28 23:34:13
【问题描述】:

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

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 中。

感谢您的帮助!!!!!!

【问题讨论】:

  • 你在执行什么样的任务?
  • 我在进行录音和播放
  • 这些是系统日志,用于显示应用程序的内存信息。
  • 别担心……这没什么异常
  • @ALL,我已经编辑了我的问题,请看一下并给我一个解决方案

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


【解决方案1】:
【解决方案2】:

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

【讨论】:

  • 我已经编辑了我的问题,请看一下并给我一个解决方案
  • 您确实需要检查代码的优化。听起来您的代码需要太多的 GC。
【解决方案3】:

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

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

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

【讨论】:

  • 我已经编辑了我的问题,请看一下并给我一个解决方案
  • 你仍然需要最小化对象定义来最小化GC。您需要向我们展示播放音频的代码,以帮助您找到这些对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 2012-04-21
相关资源
最近更新 更多