【聲明:】本文是作者(蘑菇v5)原創(chuàng),版權(quán)歸作者 蘑菇v5所有,侵權(quán)必究。本文首發(fā)在簡(jiǎn)書(shū)。如若轉(zhuǎn)發(fā),請(qǐng)注明作者和來(lái)源地址!未經(jīng)授權(quán),嚴(yán)禁私自轉(zhuǎn)載!
先看機(jī)器的內(nèi)存限制,在/system/build.prop文件中:
dalvik.vm.heapsize=128m
dalvik.vm.heapgrowthlimit=64m
heapgrowthlimit就是一個(gè)普通應(yīng)用的內(nèi)存限制,用ActivityManager.getLargeMemoryClass()獲得的值就是這個(gè)。而heapsize是在manifest中設(shè)置了largeHeap=true之后,可以使用的最大內(nèi)存值。下面做實(shí)驗(yàn),不停地解碼圖片到內(nèi)存,看多少會(huì)爆掉:當(dāng)largeHeap=false時(shí):
04-08 17:18:50.169: E/dalvikvm(25460): Out of memory:
Heap Size=60451KB, Allocated=51973KB, Limit=65536KB
當(dāng)largeHeap=true時(shí):結(jié)論就是,設(shè)置largeHeap的確可以增加內(nèi)存的申請(qǐng)量。但不是系統(tǒng)有多少內(nèi)存就可以申請(qǐng)多少,而是由dalvik.vm.heapsize限制。建議:Android官方給的建議是,作為程序員的我們應(yīng)該努力減少內(nèi)存的使用,想回收和復(fù)用的方法,而不是想方設(shè)法增大內(nèi)存。當(dāng)內(nèi)存很大的時(shí)候,每次gc的時(shí)間也會(huì)長(zhǎng)一些,性能會(huì)下降呦。