AndroidManifest中的largeHeap的作用

今天羣裏有人討論怎麼給app分配超過100M的內存,有人亮出了largeHeap參數。搜搜資料寫寫代碼,大概有些瞭解。以我的手機htc one x爲例說明一下

先看機器的內存限制,在/system/build.prop文件中:

[plain] view plaincopy
  1. dalvik.vm.heapsize=128m  
  2. dalvik.vm.heapgrowthlimit=64m  
這裏,heapgrowthlimit就是一個普通應用的內存限制,用ActivityManager.getLargeMemoryClass()獲得的值就是這個。而heapsize是在manifest中設置了largeHeap=true之後,可以使用的最大內存值。

下面做實驗,不停地解碼圖片到內存,看多少會爆掉:

當largeHeap=false時:

[plain] view plaincopy
  1. 04-08 17:18:50.169: E/dalvikvm(25460): Out of memory: Heap Size=60451KB, Allocated=51973KB, Limit=65536KB  

當largeHeap=true時:

[plain] view plaincopy
  1. 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的時間也會長一些,性能會下降呦。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章