查找浪费内存类(Find the class that waste the Memory)

2019-09-01 03:24发布

我已经在谷歌播放几个月前公布的一个应用程序,我的大多数用户具有很强的问题,我的应用程序的内存使用情况,那是真实的,因为当我检查了我的内存使用情况,从“运行应用程序”选项卡上,我看到了它取80〜110MB的存储器,像下面的图片:

为了找到类/活动或导致这个问题,我找到了MAT(内存分析工具)插件有用的代码片段,但它确实让我感到困惑,请考虑下面的图片:

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

另一个问题是直方图,的浅堆 byte[]对象过高。

它是正常的吗? 此外,当我调试一些谷歌的项目,字节值始终是太高了!

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

Answer 1:

当一个Android应用程序启动时,它继承分配对象Zygote -一招让应用产卵得更快。 所以,当你得到一个内存转储他们出现作为自己。

这个问题的答案,为什么受精卵有那么多的内存分配是另一种技巧,使resource加载速度更快。 在Android的开机,合子预装的类和资源的一些列表,以便所有其他应用程序并不需要每次都加载它们。

见ZygoteInit.java #330为实现这一预加载的。

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

看到这个答案的MAT /字节数组使用情况分析的更具体的例子从一个权威资源。



Answer 2:

你是否尝试过使用视觉VM ? 这里有一个很好的教程,找出类和实例的内存使用量( 视觉VM教程 )。 希望这可以帮助你。



文章来源: Find the class that waste the Memory