天天看點

manifest中的largeHeap是幹什麼用的?

今天群裡有人讨論怎麼給app配置設定超過100M的記憶體,有人亮出了largeHeap參數。搜搜資料寫寫代碼,大概有些了解。以我的手機htc one x為例說明一下

先看機器的記憶體限制,在/system/build.prop檔案中:

dalvik.vm.heapsize=128m
dalvik.vm.heapgrowthlimit=64m
           

這裡,heapgrowthlimit就是一個普通應用的記憶體限制,用ActivityManager.getLargeMemoryClass()獲得的值就是這個。而heapsize是在manifest中設定了largeHeap=true之後,可以使用的最大記憶體值。

下面做實驗,不停地解碼圖檔到記憶體,看多少會爆掉:

當largeHeap=false時:

04-08 17:18:50.169: E/dalvikvm(25460): Out of memory: Heap Size=60451KB, Allocated=51973KB, Limit=65536KB
           

當largeHeap=true時:

04-08 17:21:06.934: E/dalvikvm(24787): Out of memory: Heap Size=130851KB, Allocated=122377KB, Limit=65536KB
           

結論就是,設定largeHeap的确可以增加記憶體的申請量。但不是系統有多少記憶體就可以申請多少,而是由dalvik.vm.heapsize限制。

建議:Android官方給的建議是,作為程式員的我們應該努力減少記憶體的使用,想回收和複用的方法,而不是想方設法增大記憶體。當記憶體很大的時候,每次gc的時間也會長一些,性能會下降呦。

繼續閱讀