Android默认情况下分配给一个应用程序的内存大小是16M,这对于涉及到大量或者后台的应用程序来说,有点吃力,一个不小心,就会出现OOM的问题,所以,要对应用程序运行过程中的内存使用情况进行测试。
可以使用Eclipse DDMS的Heap进行测试。
首先,我们在DDMS的界面的设备选项中找到手机设备,可以看到它里面正在运行的进程:
点一下“Update Heap"图标,然后在Heap选项中查看我们标注的进程的内存使用情况:
点一下"Cause GC", 相当于向虚拟机执行一次GC请求,然后无需再按就可以动态的查看该应用程序的内存使用情况。
最值得关注的就是”data object“的"Total Size",它决定了是否存在内存泄露的危险。一般情况下,它都是固定在一个稳定的数值范围,如果回落非常大,或者该数值非常大,像是355后就会被kill掉,说明该应用程序的内存使用情况不佳,代码结构需要优化。
解决办法:
1 修改dalvik/vm/Initc:
static void setCommandLineDefaults()
TODO: base these on a system or application-specific default
/
gDvmheapSizeStart = 2 1024 1024; // Spec says 16MB; too big for us
- gDvmheapSizeMax = 16 1024 1024; // Spec says 75% physical mem
+ gDvmheapSizeMax = 32 1024 1024; // Spec says 75% physical mem
gDvmstackSize = kDefaultStackSize;
2 修改frameworks/base/core/jni/AndroidRuntimecpp:
int AndroidRuntime::startVm(JavaVM pJavaVM, JNIEnv pEnv)
//options[curOpt++]optionString = "-verbose:class";
strcpy(heapsizeOptsBuf, "-Xmx");
- property_get("dalvikvmheapsize", heapsizeOptsBuf+4, "16m");
+ property_get("dalvikvmheapsize", heapsizeOptsBuf+4, "32m");
//LOGI("Heap size: %s", heapsizeOptsBuf);
optoptionString = heapsizeOptsBuf;
mOptionsadd(opt);
在Android中,一个Process 只能使用16M内存,如果超过了这个限制就会抛出Android Out Of Memory(OOM) 这个异常。 在Android中: 1一个进程的内存可以由2个部分组成:java 使用内存 ,C 使用内存 ,这两个内存的和必须小于16M,不然就会出现OOM
以上就是关于如何使用DDMS Heap查看Android应用内存情况全部的内容,包括:如何使用DDMS Heap查看Android应用内存情况、如何修改Android应用程序能够使用的默认最大内存值、一个android应用在内存中占用多少内存等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)