android - 如何找到 GC_FOR_MALLOC 的来源?

标签 android garbage-collection

我正在开发一个 Android 应用程序,它陷入了 GC_FOR_MALLOC 释放的无限循环:

06-15 11:24:56.685: DEBUG/dalvikvm(118): GC_FOR_MALLOC freed 4136 objects / 374744 bytes in 66ms
06-15 11:24:59.176: DEBUG/dalvikvm(521): GC_FOR_MALLOC freed 9340 objects / 524152 bytes in 645ms
06-15 11:24:59.846: DEBUG/dalvikvm(521): GC_FOR_MALLOC freed 9344 objects / 524328 bytes in 149ms
06-15 11:25:01.535: DEBUG/dalvikvm(521): GC_FOR_MALLOC freed 9346 objects / 524448 bytes in 193ms
06-15 11:25:02.175: DEBUG/dalvikvm(521): GC_FOR_MALLOC freed 9344 objects / 524344 bytes in 126ms

应用程序通过套接字(专用线程)读取一些 jpeg 图像并将其显示在 imageView 中。 GC 循环阻塞了图像显示。

是否有解决方案可以知道代码的哪一行或至少代码的哪一部分正在抛出垃圾回收?

谢谢

最佳答案

我不确定你是否可以访问VM并检查它为什么一直在执行gc,但gc通常在需要时执行。您应该检查是什么占用了这么多内存。它可能正在加载您的图像(它是大图像吗?)或者它可能是您应用程序中的其他内容。检查this post on how to analyse your memory usage并在此过程中检查是否存在内存泄漏。

关于android - 如何找到 GC_FOR_MALLOC 的来源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6355724/

相关文章:

java - 了解 Android 上下文 : (null object reference)

android - CursorIndexOutOfBoundsException 请求索引 0,在 Android 中大小为 0

java - 当TLAB(线程本地分配缓冲区)已满时会发生GC吗?

Java HSQLDB - 批量插入 : OutOfMemoryError: GC overhead limit exceeded

java - Full GC 实时时间远远超过 user+sys 时间

android - 在我们的 Android 应用程序中查看 pptx

android - 无法在 phonegap android 中加载 HelloWorld 示例

php - Android - 通过 PHP 通过 HTTPClient 连接 MySQL

android - Canvas : trying to use a recycled bitmap android. graphics.Bitmap

php - 注销不会在 FOSUserBundle 中正确销毁/清除 session