我已经在谷歌播放几个月前公布的一个应用程序,我的大多数用户具有很强的问题,我的应用程序的内存使用情况,那是真实的,因为当我检查了我的内存使用情况,从“运行应用程序”选项卡上,我看到了它取80〜110MB的存储器,像下面的图片:
为了找到类/活动或导致这个问题,我找到了MAT(内存分析工具)插件有用的代码片段,但它确实让我感到困惑,请考虑下面的图片:
使用的内存的总大小为9.8MB然而“运行应用程序”选项卡显示我80MB的同时!
另一个问题是直方图,的浅堆 byte[]
对象过高。
它是正常的吗? 此外,当我调试一些谷歌的项目,字节值始终是太高了!
所以,我怎么能找到什么是使用所有这些记忆?
当一个Android应用程序启动时,它继承分配对象Zygote
-一招让应用产卵得更快。 所以,当你得到一个内存转储他们出现作为自己。
这个问题的答案,为什么受精卵有那么多的内存分配是另一种技巧,使resource
加载速度更快。 在Android的开机,合子预装的类和资源的一些列表,以便所有其他应用程序并不需要每次都加载它们。
见ZygoteInit.java #330为实现这一预加载的。
大量使用字节数组的是由于该预加载的资源(其为位图)。
看到这个答案的MAT /字节数组使用情况分析的更具体的例子从一个权威资源。
你是否尝试过使用视觉VM ? 这里有一个很好的教程,找出类和实例的内存使用量( 视觉VM教程 )。 希望这可以帮助你。