Java JVM 記憶體洩漏

2021-08-11 14:05:09 字數 710 閱讀 6058

// 記憶體洩漏:是指物件已經不會再使用了,但在記憶體中仍然無法被釋放,導致記憶體佔用量越來越大

// 引發原因:物件雖然已經不再使用了,但因為**不規範的原因,在程式中仍然被引用

// 簡單測試方法:呼叫system.gc()命令立刻進行記憶體清理,同時呼叫runtime.getruntime().totalmemory()方法列印前後記憶體變化

// 如果程式沒有其他後台功能在執行,記憶體占用卻隨著時間推移越來越大,很可能發生了記憶體洩漏

// 記憶體洩漏常見原因/解決方案:

// 手動將不再使用的變數置空(如果乙個list引用了乙個obj,那麼只把obj置空是沒用的,必須list也置空)

// 集合物件使用完畢後,要對其中的資料進行清空,否則就會保留對其他物件的引用

// 減少靜態變數的使用,使用靜態變數前,要考慮這個靜態變數是不是在以後會被經常使用

// 大量的字串拼接,盡量用stringbuilder,因為string相加本質上是建立了乙個stringbuilder,然後轉成string,會生成許多中間物件

// 使用物件池技術,減少物件的建立次數

// 對於大量資料,可以考慮分塊處理,處理一塊釋放一塊

// 盡量避免在迴圈結構中反覆建立物件,可以通過物件池來復用

// 避免在**中進行強制地記憶體**(gc,finalize),gc有自己的策略,gc次數過多可能會影響程式效率

記憶體洩漏和記憶體溢位 記憶體洩漏和記憶體溢位

記憶體洩漏 是指申請的記憶體空間使用完畢之後未 一次記憶體洩露危害可以忽略,但若一直洩漏,無論有多少記憶體,遲早都會被占用光,最終導致程式crash。因此,開發中我們要盡量避免記憶體洩漏的出現 記憶體溢位 是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用。通俗理解就是記憶體不夠用了,通常在執行大...

wxWidgets delete記憶體洩漏

定義乙個結構typedef tag struct customnode struct,再定義乙個wxarrayptrvoid m nodearray 在程式的初始化過程裡 for wxint32 i 0 i 5 i node struct ptemp new node struct ptemp a ...

PHP記憶體洩漏

如果php物件存在遞迴引用,就會出現記憶體洩漏。這個bug在php裡已經存在很久很久了,先讓我們來重現這個bug,如下 class foo class bar for i 0 i 100 i 執行以上 你會發現,記憶體使用量本應該不變才對,可實際上卻是不斷增加,unset沒有完全生效。現在的開發很多...