查看Android设备上单个进程的可用内存
$ adb shell cat /system/build.prop |
$ adb shell getprop | grep dalvik.vm.heapgrowthlimit |
dalvik.vm.heapsize 表示单个进程可用最大内存dalvik.vm.heapgrowthlimit 表示程序运行过程中实际只能使用的内存
dalvik.vm.heapstartsize
堆分配的初始大小,调整这个值会影响到应用的流畅性和整体ram消耗。这个值越小,系统ram消耗越慢,但是由于初始值较小,一些较大的应用需要扩张这个堆,从而引发gc和堆调整的策略,会应用反应更慢。相反,这个值越大系统ram消耗越快,但是程序更流畅。
dalvik.vm.heapgrowthlimit
受控情况下的极限堆(仅仅针对dalvik堆,不包括native堆)大小,dvm heap是可增长的,但是正常情况下dvm heap的大小是不会超过dalvik.vm.heapgrowthlimit的值(非正常情况下面会详细说明)。这个值控制那些受控应用的极限堆大小,如果受控的应用dvm heap size超过该值,则将引发oom(out of memory)。
dalvik.vm.heapsize
不受控情况下的极限堆大小,这个就是堆的最大值。不管它是不是受控的。这个值会影响非受控应用的dalvik heap size。一旦dalvik heap size超过这个值,直接引发oom。
查看进程的内存使用情况
$ adb shell dumpsys meminfo com.huami.midong使用进程统计信息查看内存使用情况 Settings > Developer options > Process Stats.
Android Device Monitor查看,选中进程->Update Heap
Android studio -> Android Monitor查看
Activity Manager state PackageInformation Memory Usage Memory user over time Graphics State Memory 查看内存使用情况,发起gc CPU Network
内存泄漏,内存优化分析
两个思路
通过
mat分析占用大内存的可疑对象,为什么没有释放通过
Android studio的memory montior的Reference Tree分析哪些类拥有引用是可疑的,比较他们的生命周期Android studio Memory Monitory -> Dump java heap -> Analyzer Task -> Detect Leaked Activities / Find Duplicate Strings
Android studio中分析 Dump java heap
这两天发现了4个oom问题
- 高斯模糊渐变效果实现方案优化,减少内存使用避免oom
- 自定义字体使用
Tpyeface.createFromAsset()导致内存泄漏 - static 变量引用Activity导致 activity leak
- LocationListener没有注销导致 activity leak