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