中秋一次歷時10小時的記憶體洩露修復

2021-07-05 13:10:20 字數 837 閱讀 4722

0、序

最近新版本上線,隨著使用者增多,發現5.0上的oom型別的錯誤異常的多,但是4.4上除了一些低端機型都沒有出現同樣的問題,作為乙個開發人員怎麼能不找出原因呢?!!

1、工具

對於記憶體洩露這種問題,當然要祭出leakcanary這種查記憶體洩露的神器啦。

dependencies

public

class

extends

@override

public

void

oncreate()

}

ok,搞定。但是如果你還想要自己定義監控的頁面或者變數,可以參考

由於當時我的專案中不清楚到底什麼地方洩露了,所以只做了前面的步驟。

2、思考

雖然這麼想,但是我覺得作為乙個程式猿應該先想到可能還是自己的**有問題,而不能盲目的猜測。

接下去,我就在recyclerview裡面找原因,覺得會不會是recyclerview並沒有detach掉列表項,因為之前找到了很多個recyclerview的bug,於是乎就列印log查詢是否detach,但是發現每一項都被detach了。同時我注意到另乙個問題,當我只是慢速滑動的時候,leakcanary並不顯示記憶體洩露,而是在我快速滑動的時候,leakcanary就顯示記憶體洩露了。我想會不會是快速滑動導致detach失效呢?但並不是這樣的,在快速滑動過程中,每一項都有被bind到,也同時會被detach。

3、結論

不要在乙個執行緒結束後有緊接著呼叫乙個死迴圈的執行緒,除非你有特定的條件去觸發執行緒停止,否則最好還是在可控的範圍內呼叫執行緒,畢竟這東西是不可控的,就算你退出程式,還是會執行。

over。

記一次歷時六小時的上線經歷

這是農曆去年 陽曆2016.1.29 的事了。公司的乙個專案已開發得七七八八了,要準備上線了。專案經理與公司領導及使用者協商,定於2016.1.28日 周四 上線。但這天由於專案經理需要去機場接人,加上運維組同事也忙著。就推後一天上線。這裡就不得不談下公司的專案從開發到上線的過程 公司專案分開發,測...

記CXF中的一次Non Heap記憶體洩露

最近遇到乙個webservice記憶體洩露的問題。使用jconsole連線後發現非堆記憶體和loaded classes在每次執行full gc後都會增長。classes增長的非常有規律,每次增加5000個左右。因為cxf中使用了jaxb,懷疑是jaxb被多次例項化造成的。然後使用mat,查詢dup...

記一次EventBus記憶體洩露導致的專案問題

今天遇到乙個很尷尬的問題,就是eventbus的使用過程中,在post乙個event後,於此同時,在接收event的方法中打斷點監控event的接收。這個時候我遇到很尷尬的問題,會重複接收到很多次的event事件 我當前所用的開發框架是支援將業務,資料更新,檢視更新從activity中抽離,在act...