當前位置:才華齋>計算機>java語言>

如何解決java記憶體洩漏

java語言 閱讀(2.72W)

在Java中,記憶體洩漏就是存在一些被分配的物件,這些物件有下面兩個特點,首先,這些物件是可達的,即在有向圖中,存在通路可以與其相連;其次,這些物件是無用的,即程式以後不會再使用這些物件。假如物件滿足這兩個條件,這些物件就可以判定為Java中的.記憶體洩漏,這些物件不會被GC所回收,然而它卻佔用記憶體。以下是小編為大家搜尋整理的如何解決java記憶體洩漏,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業生考試網!

如何解決java記憶體洩漏

在C++中,記憶體洩漏的範圍更大一些。有些物件被分配了記憶體空間,然後卻不可達,由於C++中沒有GC,這些記憶體將永遠收不回來。在Java中,這些不可達的物件都由GC負責回收,因此不需要考慮這部分的記憶體洩露。

注重事項:

1.最基本的建議是儘早釋放無用物件的引用。如:

……

A a = new A();

//應用a物件

a = null; //當使用物件a之後主動將其設定為空

…。

注:假如a 是方法的返回值,不要做這樣的處理,否則你從該方法中得到的返回值永遠為空,而且這種錯誤不易被發現、排除

2.儘量少用finalize函式。它會加大GC的工作量。

3.假如需要使用經常用到的圖片,可以使用soft應用型別。它儘可能把圖片儲存在記憶體中

4.注重集合資料型別,包括陣列、樹、圖、連結串列等資料結構,這些資料結構對GC來說,回收更為複雜。

5.儘量避免在類的預設構造器中建立、初始化大量的物件,防止在呼叫其自類的構造器時造成不必要的記憶體資源浪費

6.儘量避免強制系統做垃圾記憶體的回收,增長系統做垃圾回收的最終時間

7.儘量避免顯式申請陣列空間

8.儘量做遠端方法呼叫類應用開發時使用瞬間值變數,除非遠端呼叫端需要獲取該瞬間值變數的值。

9.儘量在合適的場景下使用物件池技術以提高系統性能。