官术网_书友最值得收藏!

1.2.3 示例

1.1節(jié)已經(jīng)介紹了出現(xiàn)內(nèi)存泄漏時的問題及分析方法,在這里我們再以一個真實的例子介紹常見的幾種內(nèi)存問題和分析方法。

這是發(fā)生在手機管家4.x的某個版本上的案例,新版中加入了一些功能,開發(fā)人員估計新功能可能會分配幾萬字節(jié)到幾十萬字節(jié)的內(nèi)存,因此我們來進(jìn)行內(nèi)存方面的測試驗證。當(dāng)新功能的代碼合入后,我們發(fā)現(xiàn)應(yīng)用啟動后的內(nèi)存增長超過了2MB,這可大大超出了所有人的預(yù)期,一定是有什么地方出了嚴(yán)重的問題。

由于新加入了好幾個功能,因此要逐個去排查。如果某個新功能的代碼都在同一個package下,那么就可以使用MAT的過濾功能來驗證這部分代碼是否使用了內(nèi)存,如圖1-7所示。

圖1-7 使用MAT的過濾功能

經(jīng)過一番篩選排查,發(fā)現(xiàn)內(nèi)存中多出了一些新對象,多消耗了約300KB內(nèi)存,目前這并不能解釋內(nèi)存增長了2MB的原因。但仔細(xì)檢查多出來的對象并清理掉不用的部分也是有幫助的。

經(jīng)過檢查,這部分內(nèi)存是其他新功能使用的。對此我們需要進(jìn)一步確認(rèn),這些對象是否是有用的,還是臨時創(chuàng)建的。對于臨時創(chuàng)建不再使用的對象可以主動銷毀,而對于保存著信息將要用到的對象也可以進(jìn)行進(jìn)行壓縮裁剪,以進(jìn)一步減少占用的內(nèi)存。

在以上排查中,我們確實發(fā)現(xiàn)了一些問題,但將一些不用的對象清理后再執(zhí)行測試,總體內(nèi)存并沒有明顯減少。現(xiàn)在看來,Dalvik Heap里分配的內(nèi)存并沒有增加許多,說明問題是不能只在Dalivk Heap里就能解決的,也許是別的部分出現(xiàn)了問題?接下面我們就繼續(xù)深挖下去。

主站蜘蛛池模板: 孟连| 竹溪县| 石景山区| 菏泽市| 化德县| 克山县| 长顺县| 商都县| 綦江县| 乐至县| 汽车| 济宁市| 佛坪县| 平潭县| 名山县| 广平县| 明光市| 建始县| 息烽县| 祁连县| 比如县| 巴彦淖尔市| 稻城县| 泸定县| 达孜县| 安多县| 班玛县| 犍为县| 枝江市| 西乌珠穆沁旗| 保定市| 内丘县| 盈江县| 芦山县| 济南市| 涪陵区| 巩义市| 夏河县| 大冶市| 阜平县| 清远市|