今天群裡有人讨論怎麼給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的時間也會長一些,性能會下降呦。