測試機(jī)型:三星S3 臺版 1GB Ram究履。和魅藍(lán)有點(diǎn)近滤否。本文轉(zhuǎn)自其它論壇,為什么要轉(zhuǎn)呢挎袜?因?yàn)槲业南乱粋€魅藍(lán)優(yōu)化教程要用到這里面的東西顽聂。各位魅友可以先來學(xué)習(xí)下。
在system/build.prop盯仪,原始三星S3的Dalvik虛擬機(jī)設(shè)定是這樣子的:
1.dalvik.vm.heapstartsize=8m(表示應(yīng)用程序啟動后為其分配的初始大小為8m)
這里分配的內(nèi)存容量會影響到整個系統(tǒng)對RAM的使用程度紊搪,和第一次使用應(yīng)用程序時的流暢程序。
這個值越大全景,系統(tǒng)消耗RAM則越快耀石,但是應(yīng)用程序打開后的反應(yīng)也越快。
值越小爸黄,系統(tǒng)的RAM剩余則越多滞伟,但是程序在啟動后會比較慢揭鳞。
2.dalvik.vm.heapgrowthlimit=64m(每個應(yīng)用程序最大內(nèi)存可分配到64m)
超過就會崩潰,退出該app...我猜沒錯的話
3.dalvik.vm.heapsize=256m(單個虛擬機(jī)可分配的最大內(nèi)存256m)
這里分配的內(nèi)存容量會影響到整個系統(tǒng)對RAM的使用程序梆奈,和程序在運(yùn)行一段時間后的反應(yīng)速度野崇。這個值越大,系統(tǒng)消耗RAM則越快亩钟,但是程序會運(yùn)行的非常穩(wěn) 定乓梨,尤其是游戲和視頻程序的內(nèi)容加載速度可以大幅度提升。值越小清酥,系統(tǒng)的RAM剩余則越多扶镀,但是程序會很卡,尤其是游戲在切換場景Loading的時候會 花費(fèi)很多的時間焰轻。若應(yīng)用程序需要使用超過這個值的內(nèi)存時臭觉,將會觸發(fā)系統(tǒng)的垃圾收集器辱志,系統(tǒng)和程序就會卡頓蝠筑。
用上面設(shè)定的話
每開啟一只app荸频,系統(tǒng)就會劃出8m的動態(tài)內(nèi)存給該程式使用客冈,超過的部分會再+8m
共可以+7次8m旭从,包含一開始劃出的8m,總共64m场仲,這是單一只程式的最大動態(tài)內(nèi)存使用量
超過的話,該程式就會崩潰(自動結(jié)束掉)
單個虛擬機(jī)可分配的最大內(nèi)存256m鸽素,意思是可以裝滿64m內(nèi)存的程式X4
超過的部分就會對虛擬機(jī)內(nèi)的程式強(qiáng)制回收內(nèi)存,一方面要先強(qiáng)制關(guān)掉一些程式亦鳞,一方面要加載程式劃分新的內(nèi)存馍忽,這時候就會出現(xiàn)卡卡卡、頓頓頓
因?yàn)槊總€人使用習(xí)慣不同燕差,有時愛裝一堆widget(小工具)在桌面上,單單擺在桌面上也不常使用他
也許單一widget只要3-5m瓦呼,如果今天一開始就劃分8m內(nèi)存給他测暗,對于一個常駐不到5M的程式
磨澡,就多浪費(fèi)3M的內(nèi)存质和,一般原廠rom閑置程序+后臺程序就約30個稳摄,每個都浪費(fèi)約3M內(nèi)存
就將近浪費(fèi)90M
所以我們可以將
1.dalvik.vm.heapstartsize=8m饲宿,改為=4M后重開機(jī)
光待機(jī)其況下你就會發(fā)現(xiàn)使用中內(nèi)存變少了,可用內(nèi)存變多了弃锐,雖然你在使用桌面小工具時候
可能不會比當(dāng)初還要順殿托,因?yàn)橄到y(tǒng)還在幫該程式劃分新的內(nèi)存空間,但也不至于頓
2.dalvik.vm.heapgrowthlimit=64m不用改支竹,現(xiàn)在的app在前景中都吃很大內(nèi)存
若改小成32m,那假設(shè)程序內(nèi)存要吃到40m才會夠用饶碘,該程式可能就當(dāng)給你看
3..dalvik.vm.heapsize=256m(單個虛擬機(jī)可分配的最大內(nèi)存256m)馒吴,雖然是寫單個虛擬機(jī),但系統(tǒng)到底會產(chǎn)生多少個虛擬機(jī)...我不確定豪治,但唯一確定是不超過實(shí)際ram的可用量
記得S3雖然是配1G RAM,但實(shí)際上看到好像是780M吧(其他好像是GPU用掉了)
780/256=3...扯罐,大概就是3個虛擬機(jī)左右(應(yīng)該是這樣)
想要看到更多ram的人可以將256改為128m,重開機(jī)后...你會發(fā)現(xiàn)可用內(nèi)存又變多了...
但一樣掩浙,開啟新程式時候要再+128劃分新的虛擬機(jī)秸歧,速度可能慢一些,但不會頓寥茫,又可節(jié)省內(nèi)存的不必要浪費(fèi)
以上是犧牲一些開啟速度,但可以減緩被系統(tǒng)強(qiáng)制回收內(nèi)存的頓挫感
小弟我第一次打這么大篇瞎掰文芭梯,各位當(dāng)作參考就好不要完全相信
關(guān)于root后修改build.prop當(dāng)?shù)簟⑺罊C(jī)玖喘、變磚,請不要晚上來找我~謝謝
懶人總結(jié) S3 臺版
1.想要裝很多widget小工具到桌面的贬派,推薦
dalvik.vm.heapstartsize=5m
dalvik.vm.heapgrowthlimit=40m
dalvik.vm.heapsize=160m
也許開啟程式?jīng)]那么快澎媒,但比較不卡頓,且可用內(nèi)存會比較多
2.只要玩游戲请敦、桌面很干凈很無聊的储玫、不安裝其他widget小工具
dalvik.vm.heapstartsize=16m
dalvik.vm.heapgrowthlimit=64m
dalvik.vm.heapsize=384m
加載大型程式或游戲比較快,缺點(diǎn)是可用內(nèi)存會比較小
S3 LTE (I9305)默認(rèn)dalvik也是跟S3一樣
但是可以改成(我也是這樣設(shè)定)
dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=64m
dalvik.vm.heapsize=576m(1750/576=3...)可以做出3個虛擬機(jī)撒穷。
(576/8)在8M以下的程式可以有72只閑置程式
(576/64)一個虛擬機(jī)可以容納9只多工作。
//最后附上本人魅藍(lán)使用的參數(shù)禽笑,回帖可見齐媒。
dalvik.vm.heapstartsize=8m
dalvik.vm.heapgrowthlimit=80m
dalvik.vm.heapsize=320m
dalvik.vm.heaptargetutilization=0.84
dalvik.vm.heapminfree=1m
dalvik.vm.heapmaxfree=8m
最后科普下:
dalvik.vm.heapstartsize
堆分配的初始大小,調(diào)整這個值會影響到應(yīng)用的流暢性和整體ram消耗。這個值越小贫奠,系統(tǒng)ram消耗越慢,但是由于初始值較小拷恨,一些較大的應(yīng)用需要擴(kuò)張這個堆谢肾,從而引發(fā)gc和堆調(diào)整的策略,會應(yīng)用反應(yīng)更慢。相反微姊,這個值越大系統(tǒng)ram消耗越快分预,但是程序更流暢。
dalvik.vm.heapgrowthlimit
極限堆大小笼痹,dvm heap是可增長的凳干,但是正常情況下dvm heap的大小是不會超過dalvik.vm.heapgrowthlimit的值。如果受控的應(yīng)用dvm heap size超過該值救赐,則將引發(fā)oom。
dalvik.vm.heapsize
使用大堆時少欺,極限堆大小馋贤。一旦dalvik heap size超過這個值,直接引發(fā)oom配乓。在android開發(fā)中,如果要使用大堆崎页,需要在manifest中指定android:largeHeap為true腰埂。這樣dvm heap最大可達(dá)dalvik.vm.heapsize。
[dalvik.vm.heaptargetutilization]: [0.75] 可以設(shè)定內(nèi)存利用率的百分比牺荠,當(dāng)實(shí)際的利用率偏離這個百分比的時候驴一,虛擬機(jī)會在GC的時候調(diào)整堆內(nèi)存大小,讓實(shí)際占用率向個百分比靠攏肝断。
上面的幾個參數(shù)是與虛擬機(jī)的內(nèi)存分配相關(guān)的驰凛,虛擬機(jī)的內(nèi)存分配過程是下面這樣的:
1 首先判斷一下需要申請的size是不是過大担扑,如果申請的size超過了堆的最大限制,則轉(zhuǎn)入步驟6
2 嘗試分配渔隶,如果成功則返回洁奈,失敗則轉(zhuǎn)入步驟3
3 判斷是否gc正在進(jìn)行垃圾回收,如果正在進(jìn)行則等待回收完成之后呈野,嘗試分配印叁。如果成功則返回,失敗則轉(zhuǎn)入步驟4
4 自己啟動gc進(jìn)行垃圾回收轮蜕,這里gcForMalloc的參數(shù)是false。所以不會回收軟引用率触,回收完成后嘗試分配汇竭,如果成功則返回,失敗則轉(zhuǎn)入步驟5
5 調(diào)用dvmHeapSourceAllocAndGrow嘗試分配细燎,這個函數(shù)會擴(kuò)張堆。所以heap startup的時候可以給一個比較小的初始堆悼凑,實(shí)在不夠用再調(diào)用它進(jìn)行擴(kuò)張
6 進(jìn)入回收軟引用階段击狮,這里gcForMalloc的參數(shù)是ture,所以需要回收軟引用。然后調(diào)用dvmHeapSourceAllocAndGrow嘗試分配捺萌,如果失敗則拋出OOM膘茎。
好了酷誓,教程到這里結(jié)束了,如果你堅持看完了棒拂,你早晚會成為大神的:D玫氢。