Android App 內存分配 heapsize & heapgrowthlimit

Android設備出廠以後,java虛擬機對單個應用的最大內存分配就確定下來了,超出這個值就會OOM。這個屬性值是定義在/system/build.prop文件中的

dalvik.vm.heapstartsize

dalvik.vm.heapstartsize=8m它表示堆分配的初始大小,它會影響到整個系統對RAM的使用程度,和第一次使用應用時的流暢程度。它值越小,系統ram消耗越慢,但一些較大應用一開始不夠用,需要調用gc和堆調整策略,導致應用反應較慢。它值越大,這個值越大系統ram消耗越快,但是應用更流暢。

dalvik.vm.heapgrowthlimit

dalvik.vm.heapgrowthlimit=64m // 單個應用可用最大內存主要對應的是這個值,它表示單個進程內存被限定在64m,即程序運行過程中實際只能使用64m內存,超出就會報OOM。(僅僅針對dalvik堆,不包括native堆)

dalvik.vm.heapsize

dalvik.vm.heapsize=384m //heapsize參數表示單個進程可用的最大內存,但如果存在heapgrowthlimit參數,則以heapgrowthlimit爲準.heapsize表示不受控情況下的極限堆,表示單個虛擬機或單個進程可用的最大內存。而android上的應用是帶有獨立虛擬機的,也就是每開一個應用就會打開一個獨立的虛擬機(這樣設計就會在單個程序崩潰的情況下不會導致整個系統的崩潰)。

heapgrowthlimit與heapsize

注意:在設置了heapgrowthlimit的情況下,單個進程可用最大內存爲heapgrowthlimit值。在android開發中,如果要使用大堆,需要在manifest中指定android:largeHeap爲true,這樣dvm heap最大可達heapsize。不同設備,這些個值可以不一樣。一般地,廠家針對設備的配置情況都會適當的修改/system/build.prop文件來調高這個值。隨着設備硬件性能的不斷提升,從最早的16M限制(G1手機)到後來的24m,32m,64m等,都遵循Android框架對每個應用的最小內存大小限制,參考http://source.android.com/compatibility/downloads.html
3.7節。通過代碼查看每個進程可用的最大內存,即heapgrowthlimit值:ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);int memClass = activityManager.getMemoryClass();//64,以m爲單位

heaptargetutilization

dalvik.vm.heaptargetutilization: 當前理想的堆內存利用率. GC後, Dalvik的Heap內存會進行相應的調整, 調整到當前存活的對象的大小和 / Heap大小 接近這個選項的值, 即這裏的0.75. 注意, 這只是一個參考值.

heapminfree

dalvik.vm.heapminfree=512k : 單次Heap內存調整的最小值.

heapmaxfree

dalvik.vm.heapmaxfree=2m : 單次Heap內存調整的最大值.

獲取Android手機應用內存大小
手機不同其性能也不同,手機本身內存可能有大有小,所以針對每個應用的內存大小也不相同。

方法一

adb shell  getprop | grep dalvik.vm.heapgrowthlimit  
 [dalvik.vm.heapgrowthlimit]: [64m]  

方法二

ActivityManager activityManager =(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);  
activityManager.getMemoryClass();  
activityManager.getLargeMemoryClass();  

方法三

adb shell cat /system/build.prop  
dalvik.vm.heapstartsize=8m   
dalvik.vm.heapgrowthlimit=64m   
dalvik.vm.heapsize=256m  

方法四

Runtime.getRuntime().maxMemory()  

方法五
直接查看build.prop文件

dalvik.vm.heapstartsize=3m
dalvik.vm.heapgrowthlimit=48m
dalvik.vm.heapsize=64m
dalvik.vm.heaptargetutilization=0.75
dalvik.vm.heapminfree=512k
dalvik.vm.heapmaxfree=2m


作者:DD_Dog
鏈接:https://www.jianshu.com/p/766a380a9ae8
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章