对于我写的一个简单的应用程序,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运行。你知道为什么会这样,以及如何解决这个问题?感谢。
答案 0 :(得分:2)
您的代码可能有问题。我将给出一个通用答案,因为没有提供代码。
如果您有500条消息通知每个消息中释放了大约250K,则表示您的代码已分配/释放了总共125MB。
对于一般的html页面,这不应该发生,通常不需要这么多的内存。
您需要确定应用程序重复创建/发布的对象,并尝试重用它们而不是创建新对象。
在Eclipse中,您可以使用DDMS
标签。选择您的流程,转到Allocation Tracker
并按Start Tracking
,以获取正在分配的对象。
问候。