查看單個應用程序最大內存限制
adb shell getprop|grep heapgrowthlimit
|[dalvik.vm.heapgrowthlimit]: [96m]
- 對于內存的限制 這里糾正一下:是 dalvik heap不能超過最大限制汹买,跟Native heap沒有關系!
- 這個96M是單個程序限制最大內存聊倔,而meminfo 里面的dalvik heap size 的最大值若果超出了96m 那就很可能會發(fā)生OOM
- dalvik.vm.heapgrowthlimit和dalvik.vm.heapsize都是java虛擬機的最大內存限制晦毙,應用如果不想在dalvik heap達到heapgrowthlimit限制的時候出現OOM,需要在Manifest中的application標簽中聲明android:largeHeap=“true”耙蔑,聲明后應用dalvik heap 達到heapsize的時候才會出現OOM见妒!
最大限制查看:
應用啟動后分配的初始內存
adb shell getprop|grep dalvik.vm.heapstartsize
|[dalvik.vm.heapstartsize]: [8m]
單個java虛擬機最大的內存限制
adb shell getprop|grep dalvik.vm.heapsize
|[dalvik.vm.heapsize]: [384m]
關于內存
- VSS – Virtual Set Size 虛擬耗用內存(包含共享庫占用的內存)
- RSS – Resident Set Size 實際使用物理內存(包含共享庫占用的內存)
- PSS – Proportional Set Size 實際使用的物理內存(比例分配共享庫占用的內存)
- USS – Unique Set Size 進程獨自占用的物理內存(不包含共享庫占用的內存) USS 是針對某個進程開始有可疑內存泄露的情況, 是一個程序啟動了會產生的虛擬內存甸陌,一旦這個程序進程殺掉就會釋放须揣!
- 沒錯。不過USS需要通過root的手機钱豁。一般沒有root的手機我們可以獲取PSS耻卡。而PSS的話可以通過如下命令來獲取
- 一般來說內存占用大小有如下規(guī)律:VSS >= RSS >= PSS >= USS
adb shell dumpsys meminfo <Package Name>|grep TOTAL
```
Monitor工具
1.打開Device Monitor。
從<sdk>/tools/路徑下加載monitor工具牲尺。
2.在Debug Monitor窗口卵酪,從左邊的進程列表中選擇要查看的應用進程。
3.點擊進程列表上面的Update Heap谤碳。
4.在右側面板中選擇Heap標簽頁凛澎。
Heap視圖顯示了堆內存使用的基本狀況,每次垃圾回收后會更新估蹄。要看更新后的狀態(tài),點擊Gause GC按鈕沫换。
圖1.Device Monitor工具顯示[1] Update Heap和 [2] Cause GC按鈕臭蚁。右邊的Heap標簽頁顯示堆的情況最铁。
- 有個app項目,每次都無緣無故閃退垮兑。然后我用monitor工具發(fā)現冷尉,byte array這里不停的增長,經常達到了20M 以上系枪,最后找到原因是圖片的問題