查看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