Android增长堆碎片情况

Ere*_*oid 24 android

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

Grow heap ( frag case ) to 3.373 for 19764-byte allocation
Run Code Online (Sandbox Code Playgroud)

它是什么?模拟器问题?或者是其他东西?我用的是太多记忆吗?

预先感谢您的任何帮助 :)

Ste*_*ell 36

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

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

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