記憶體洩漏的原因

2021-09-12 00:24:29 字數 828 閱讀 7693

1、資源物件沒關閉。

如cursor、file等資源。他們會在finalize中關閉,但這樣效率太低。容易造成記憶體洩露。 sqlitecursor,當資料量大的時候容易洩露

2、使用adapter時,沒有使用系統快取的converview。

3、即時呼叫recycle()釋放不再使用的bitmap。

適當降低bitmap的取樣率,如:

bitmapfactory.options options = newbitmapfactory.options();    

options.insamplesize = 2;//寬高都為原來的二分之一,即為原來的四分之一

bitmap bitmap =bitmapfactory.decodestream(cr.openinputstream(uri), null, options); preview.setimagebitmap(bitmap);

複製**

盡量避免activity的context在自己的範圍外被使用,這樣會導致activity無法釋放。

5、註冊沒取消造成記憶體洩露

如:廣播

6、集合中的物件沒清理造成的記憶體洩露我們通常把一些物件的引用加入到了集合中,當我們不需要該物件時,並沒有把它的引用從集合中清理掉,這樣這個集合就會越來越大。如果這個集合是static的話,那情況就更嚴重了。

**7、handler應該申明為靜態物件, 並在其內部類中儲存乙個對外部類的弱引用。

android記憶體洩漏的原因

記憶體洩漏也稱作 儲存滲漏 用 動態儲存 分配函式動態開闢的空間,在使用完畢後未釋放,結果導致一直佔據該記憶體單元。直到程式結束。即所謂記憶體洩漏。記憶體洩漏簡單地說就是申請了一塊記憶體空間,使用完畢後沒有釋放掉。它的一般表現方式是程式執行時間越長,占用記憶體越多,最終用盡全部記憶體,整個 系統崩潰...

C 記憶體洩漏原因分析

一.記憶體洩漏 1.什麼是記憶體洩漏 記憶體洩漏是指在程式中申請了記憶體沒有呼叫釋放函式,導致記憶體沒有被系統 程式記憶體會不斷增大,最後導致系統記憶體不足,程式卡頓或崩潰。2.記憶體洩漏的原因 1 呼叫new或者malloc申請記憶體後沒有主動呼叫delete或者free。2 在使用多型特性時,基...

ThreadLocal原理及記憶體洩漏原因

threadlocal有兩個問題 1.每個變數副本是儲存在哪了?2.變數副本是怎樣從共享的變數中www.cppcns.com賦值出來的?原始碼中threadlocal的初始值是什麼時候設定的。threadlocal為每個執行緒維護乙個變數的副本?每個執行緒的threadl程式設計客棧ocalmap都...