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

1.3 新問題的進一步挖掘

上一節(jié)介紹了內(nèi)存測試的基本流程,講述了如何發(fā)現(xiàn)并處理簡單的內(nèi)存問題。對于Dalvik Heap部分總結(jié)出了一些常見的問題模式,以及如何使用工具識別和處理這些常見的內(nèi)存問題。

當簡單問題不再是問題的時候,我們就會開始遇上一些奇怪問題了,類似于下面這些:


“我們這個版本引入了一個挺簡單的庫,內(nèi)存就漲了2MB。”

“這些代碼只是初始化了幾個對象,還沒有開始用呢。”

“我只是改了一行代碼,沒有創(chuàng)建新對象。”

“我一行代碼都沒改,怎么會漲呢?”


這次出現(xiàn)的問題就是這樣一類問題,新版本的Dalvik Heap Pss內(nèi)存出現(xiàn)了2MB左右的增長,但Dalvik Heap Alloc只增長了273KB,而從Dalvik Heap Free也能看出大部分增長的內(nèi)存是處于空閑狀態(tài)的。

對問題經(jīng)過一段時間的觀察,我們有以下幾點發(fā)現(xiàn):

·經(jīng)過較長時間待機后也沒有被釋放回系統(tǒng)。

·有幾處代碼會導(dǎo)致內(nèi)存增長,只要將這些代碼屏蔽掉,內(nèi)存使用情況就下降到正常水平。

·這些代碼分配的內(nèi)存并不多,甚至有些地方是不需要分配內(nèi)存的。

·有些代碼并不是這個版本新加入的,已經(jīng)存在較長時間了。

·使用裁剪功能的方法編譯并分析內(nèi)存后,基本可以確定是新加入代碼消耗了內(nèi)存,但并沒有內(nèi)存泄漏,代碼經(jīng)過審查也沒有發(fā)現(xiàn)問題。

這個結(jié)果讓我們陷入了困惑,常用的方法找不出問題,說明有更深層次的原因。接下來要從更底層的DVM虛擬機尋找問題。

主站蜘蛛池模板: 兴业县| 岱山县| 永宁县| 阿拉善左旗| 航空| 荆州市| 宝坻区| 磐石市| 库伦旗| 含山县| 来宾市| 商水县| 柳州市| 旌德县| 嵊泗县| 新竹县| 子洲县| 略阳县| 娱乐| 南皮县| 清水县| 福建省| 梁河县| 宁陵县| 漳州市| 梨树县| 蒙自县| 景宁| 搜索| 宝丰县| 舒兰市| 湘乡市| 绥德县| 南皮县| 谢通门县| 莲花县| 荆门市| 台江县| 中山市| 临清市| 宁化县|