Android增长堆碎片情况

时间:2011-08-30 17:08:01

标签: android

我正在开发一个应用程序来播放来自互联网的音乐...我的应用程序做了很多事情并且它的结构是这样的:我有一个标签视图,每个视图都分配在内存中所以每次我浏览标签我再次查找以前的状态(每个选项卡也可以打开webview以查找有关互联网中的歌曲,新闻等的信息)..所有增加内存占用但使应用程序非常用户友好...在注意避免内存泄漏之后Android指南,我试着查看堆占用,我发现我的应用程序分配最大3.5MB的内存,分配的堆大小是4.5 - 4.6 MB ...我正在模拟器上工作..他们不是这样我想,但有时我的应用程序重新启动,在LogCat中创建一个奇怪的消息,如

Grow heap ( frag case ) to 3.373 for 19764-byte allocation

这是什么?模拟器问题?或者是其他东西?我是否使用了太多记忆?

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:36)

最大堆大小取决于设备(您可以通过调用Runtime.getRuntime().maxMemory()来获取该值),但它可能大约为32MB。为了节省内存,Android不会自动为每个应用分配最大内存。相反,它等待应用程序需要更多内存,然后根据需要为其提供更多堆空间,直到达到最大值。我相信这是你看到的Grow heap消息。

如果你做了大量的内存分配和释放,你可能会遇到碎片问题。维基百科有一个不错的描述here,但基本上意味着你可能拥有所需的内存,而不是一个块。因此需要增加堆。

所以回答你的问题,它可能不是模拟器问题,它只是程序的本质,听起来有点内存沉重。然而,这不是一件坏事。我不认为使用3-5MB用于webview的多个标签太多了。