2013-04-25 64 views
1

我几个月前在Google Play上发布了一个应用程序,我的大部分用户都对我的应用程序的内存使用有严重问题,这是真的,因为当我检查了我的内存使用情况从“运行的应用程序”标签,我看到,它利用存储器80〜110MB,像下面的图片:寻找浪费内存的课程

enter image description here

为了找到类/活动或代码片段引起该问题我发现MAT(内存分析工具)插件有用,但它确实让我感到困惑,请考虑到以下图像:

enter image description here

使用的内存的总大小为9.8MB然而“运行应用程序”选项卡显示我80MB在同一时间!

另一个问题是柱状图,浅堆byte[]对象太高。

这是正常的吗?另外,当我调试一些Google项目时,字节值总是太高!

enter image description here

所以我怎么能找到什么是使用所有这些记忆?

+0

你检查了[这个问题](http://stackoverflow.com/questions/6080906/memory-analyzer-tool-in-android?lq=1)?这听起来像你想要的。 – thegrinner 2013-09-17 20:47:35

+0

这里要澄清一下,您是否尝试过常规调试?你期望使用那个空间,搜索byte []等的代码。 – clwhisk 2013-09-22 02:40:38

回答

2

当一个Android应用程序启动时,它继承了由Zygote分配的对象 - 这是使应用程序产卵速度更快的技巧。所以当你得到一个内存转储时,它们会显示为你自己的。

为什么Zygote有这么多的内存分配的答案是让resource加载更快的另一个诀窍。在Android启动期间,Zygote 预加载一些类和资源的列表,因此所有其他应用程序不需要每次加载它们。

参见ZygoteInit.java#330用于实施这种预加载。

大量使用字节数组是由于此预加载的资源(它是位图)。

查看此answer以获取来自权威资源的MAT /字节数组使用情况分析的更具体示例。

0

您是否尝试过使用visual vm?这里有一个很好的教程来找出类和实例的内存使用情况(visual vm tutorial)。希望这可以帮助你。