注意java代碼的記憶體流失

來源:互聯網
上載者:User

原文:

http://blog.csdn.net/yahuadai/article/details/7675318

對於有語言編譯基礎的同志,要注意了.如果你是剛學java的.那麼下面你必須要看.當然本人也是一樣.也會出現下面某些錯誤.所以本人總結了一些.

當然都是個人看法.不代表就是對的.也許有些是錯的.同時也希望熟悉JAVA的高高手指出.或者有更好的看法或建議.都可以和我溝通.大家一齊來學習.
同時這也是對自己的一種提高.

在項目應用中.往往都是面臨複雜的業務.而且使用者量增加.記憶體使用量自然就會增大.還有HTTP的伺服器只有一定的能力.所以代碼編寫也是一件非常重要的.效能和穩定.這個是極為重要.

總結如下:

1、儘早釋放無用對象的引用。特別是大對象和集合對象,通過置為NULL,暗示垃圾收集器來收集該對象,防止發生記憶體泄露。
2、程式中如果出現大量使用字串處理,避免使用 String ,應使用 StringBuffer。
   for(Int i=0;i<100;i++)
   {
 String s1="";
 s1=s1+"abc";//不要這樣寫
   }

3、盡量少用靜態變數,因為靜態變數是全域的, GC 不會回收的。

4、避免集中建立對象尤其是大對象, JVM 會突然需要大量記憶體,這時必然會觸發 GC 最佳化系統記憶體環境;顯示的聲明數組空間,而且申請數量還極大。
5、盡量運用對象池技術以提高系統效能;生命週期長的對象擁有生命週期短的對象時容易引發記憶體流失,例如大集合對象擁有大資料量的業務對象的時候,可以考慮分塊進行處理,然後解決一塊釋放一塊的策略。

6、不要在經常調用的方法中建立對象,尤其是忌諱在迴圈中建立對象。可以適當的使用 hashtable , vector 建立一組對象容器,然後從容器中去取那些對象,而不用每次 new 之後又丟棄。

7、一般都是發生在開啟大型檔案或跟資料庫一次拿了太多的資料,造成 Out Of Memory Error 的狀況,這時就大概要計算一下資料量的最大值是多少,並且設定所需最小及最大的記憶體空間值。
8、注意集合資料類型,包括數組、樹、圖、鏈表等資料結構,這些資料結構對GC來說,回收更為複雜。
9、盡量避免在類的預設構造器中建立、初始化大量的對象,防止在調用其自類的構造器時造成不必要的記憶體資源浪費。
10、盡量避免強制系統做垃圾記憶體的回收,增長系統做記憶體回收的最終時間。

11、代碼中是否有死迴圈或遞迴調用 
12、是否有大迴圈重複產生新對象實體。
13、檢查List、MAP等集合對象是否有使用完後,未清除的問題。List、MAP等集合對象會始終存有對對象的引用,使得這些對象不能被GC回收。
下面給出了一個簡單的記憶體泄露的例子。在這個例子中,我們迴圈申請Object對象,並將所申請的對象放入一個Vector中,如果我們僅僅釋放引用本身,那麼Vector仍然引用該對象,所以這個對象對GC來說是不可回收的。

Vector v=new Vector(10);for (int i=1;i<100; i++){    Object o=new Object();    v.add(o);    o=null; }

 
函數內,如果可以清除的,清除集合中對象

Map<Object,Object> v=new Map<Object,Object>();for (int i=1;i<100; i++){    Object o=new Object();    v.put(i,o); }v.clear();

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.