【Java JVM】如何避免記憶體流失、溢出__Java

來源:互聯網
上載者:User

總結網路、書本中的相關知識,介紹如何避免記憶體流失、溢出 首先介紹一下什麼是記憶體流失、溢出(參考我的收藏):

1、記憶體流失 memory leak:對象可達但不可用;是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體泄露危害可以忽略,但記憶體泄露堆積後果很嚴重,無論多少記憶體,遲早會被佔光。

2、記憶體溢出 out of memory:記憶體大小不夠;是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;比如申請了一個integer,但給它存了long才能存下的數,那就是記憶體溢出。 如何避免記憶體流失、溢出 1、儘早釋放無用對象的引用
好的辦法是使用臨時變數的時候,讓引用變數在推出活動域後自動化佈建為null,暗示垃圾收集器來收集該對象,防止發生記憶體流失。 2、程式進行字串處理時,盡量避免使用String,而應該使用StringBuffer。
因為String類是不可變的,每一個String對象都會獨立佔用記憶體一塊地區。 3、盡量少用靜態變數
因為靜態變數是全域的,存在方法區,GC不會回收。(用永久代實現的方法區,記憶體回收行為在這個地區是比較少出現的,記憶體回收行程的主要目標是針對常量池和類型的卸載) 4、避免集中建立對象,尤其是大對象,如果可以的話盡量使用流操作
JVM會突然需要大量neicun,這時會出發GC最佳化系統記憶體環境 5、盡量運用對象池技術以提高系統效能
生命週期長的對象擁有生命週期短的對象時容易引發記憶體流失,例如大集合對象擁有大資料量的業務對象的時候,可以考慮分塊進行處理,然後解決一塊釋放一塊的策略。 6、不要在經常調用的方法中建立對象,尤其忌諱在迴圈中建立對象
可以適當的使用hashtable,vector建立一組對象容器,然後從容器中去取這些對象,而不用每次new之後又丟棄。 7、最佳化配置 記憶體溢出的解決方案是什麼: 1、從代碼層面進行最佳化完善,盡量避免該情況發生; 2、調整最佳化伺服器配置:
1)設定-Xms、-Xmx等
2)設定NewSize、MaxNewSize相等
3)設定 Heap size,PermGen space

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.