1

几个月前我在 Google Play 上发布了一个应用程序,我的大多数用户对我的应用程序的内存使用有很大的问题,这是真的,因为当我从“运行应用程序”选项卡检查我的内存使用情况时,我看到了它需要80~110MB的内存,如下图:

在此处输入图像描述

要查找导致此问题的类/活动或代码片段,我发现 MAT(内存分析工具)插件很有用,但它真的让我感到困惑,请考虑下图:

在此处输入图像描述

已用内存的总大小为9.8MB ,但“正在运行的应用程序”选项卡同时显示80MB

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

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

在此处输入图像描述

那么我怎样才能找到正在使用所有这些内存的内容呢?

4

2 回答 2

2

当一个 Android 应用程序启动时,它会继承分配的对象Zygote- 一个使应用程序生成速度更快的技巧。因此,当您获得内存转储时,它们会显示为您自己的。

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

有关此预加载的实现,请参见ZygoteInit.java #330。

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

有关来自权威资源的 MAT / 字节数组使用分析的更具体示例,请参阅此答案

于 2013-09-18T09:02:39.430 回答
0

您是否尝试过使用视觉虚拟机?这是一个很好的教程,可以找出类和实例的内存使用情况(visual vm tutorial)。希望这对您有所帮助。

于 2013-09-18T06:17:42.177 回答