SurfaceView記憶體流失問題的解決,surfaceview記憶體流失
mSurfaceView.getHolder().getSurface().release();
mfc中的記憶體流失問題怎解決
百度百科 記憶體泄露:
一般我們常說的記憶體流失是指堆記憶體的泄漏。堆記憶體是指程式從堆中分配的,大小任意的(記憶體塊的大小可以在程式運行期決定),使用完後必須顯式釋放的記憶體。應用程式一般使用malloc,calloc,realloc,new等函數從堆中分配到一塊記憶體,使用完後,程式必須負責相應的調用free或delete釋放該記憶體塊,否則,這塊記憶體就不能被再次使用,我們就說這塊記憶體流失了。
記憶體流失是常見的問題。當以前分配的一片記憶體不再需要使用或無法訪問時,但是卻並沒有釋放它,那麼對於該進程來說,會因此導致總可用記憶體的減少,這時就出現了記憶體流失。儘管優秀的編程實踐可以確保最少的泄漏,但是根據經驗,當使用大量的函數對相同的記憶體塊進行處理時,很可能會出現記憶體流失。尤其是在碰到錯誤路徑的情況下更是如此。
參考資料:百度
JAVA 記憶體流失問題
Java中雖然使用了gc策略,但事實上還是會出現記憶體流失現象的,java因此還提出了弱引用等局部解決方案。
但樓主說的System.exit(0)是不會形成記憶體流失的。
其實這裡都是兩個範疇的記憶體了。樓上以及我開始說的Java中的記憶體是指虛擬機器的記憶體,映射到宿主機可以有各種實現,雖然一般也是映射到記憶體。 而System.exit(0)會析構掉虛擬機器,也就是把這個虛擬機器都拆了,也就無從談起虛擬機器記憶體流失不泄漏的概念,正所謂皮之不存,毛將焉附。而問題是宿主機的記憶體是否泄漏了。從原理上說,虛擬機器運行時,不管執行怎樣的指令,映射到宿主機器資源,都回在機器被拆掉時釋放。當然,從實現上說,如果宿主作業系統,或者JVM有bug,當然有可能造成記憶體流失,但和java程式員寫的客戶程式無關。(補充:包括在宿主機內殺java進程,其資源回收問題是作業系統和java平台的責任。我們在古老的作業系統經常會遇到檔案沒正常關閉之類的問題,但現在的作業系統這些問題應該不會很大,也就是宿主機其實也有一定的回收機制,包括記憶體回收,但著本身不是記憶體流失的範疇,記憶體流失是指程式運行時的客戶程式造成的記憶體資源失控。當客戶程式退出時的問題,就是作業系統設計的範疇了)