对于我正在编写的一个简单应用程序,logcat会发送许多GC_FOR_MALLOC消息,如下所示:

D/dalvikvm(10236): GC_FOR_MALLOC freed 224K, 51% free 3290K/6599K, external 0K/0K, paused 21ms
D/dalvikvm(10236): GC_FOR_MALLOC freed 290K, 50% free 3323K/6599K, external 0K/0K, paused 33ms
D/dalvikvm(10236): GC_FOR_MALLOC freed 229K, 50% free 3325K/6599K, external 0K/0K, paused 24ms


该应用程序并不多,仅使用Apache HttpClient 4.X通过https加载两个HTML文档。我已经定义了android:largeHeap="true",但是它没有帮助。

从该消息中我读到我有50%的可用内存,但是无论如何,GC还是被迫运行。您知道为什么会这样,如何解决吗?谢谢。

最佳答案

您的代码可能有问题。我将给出一个通用的答案,因为没有提供任何代码。

如果您有500条消息,通知每个消息中大约释放了25万条消息,则意味着您的代码已分配/释放了总计125MB的消息。

对于一般的html页面,这种情况不应该发生,通常不需要这种内存量。

您需要确定应用程序正在重复创建/释放的对象,并尝试重用它们而不是创建新对象。

在Eclipse中,您可以使用DDMS选项卡。选择您的进程,转到Allocation Tracker并按Start Tracking,以获取正在分配的对象。

问候。

10-08 00:18