如何避免內存泄漏、溢出

首先介紹一下什麼是內存泄漏、溢出:

  1. 內存泄漏 memory leak:對象可達但不可用;是指程序在申請內存後,沒法釋放已申請的內存空間,一次內存泄露危害能夠忽略,但內存泄露堆積後果很嚴重,不管多少內存,早晚會被佔光。服務器

  2. 內存溢出 out of memory:內存大小不夠;是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;好比申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。性能

如何避免內存泄漏、溢出

  1. 儘早釋放無用對象的引用
    好的辦法是使用臨時變量的時候,讓引用變量在推出活動域後自動設置爲null,暗示垃圾收集器來收集該對象,防止發生內存泄漏。大數據

  2. 程序進行字符串處理時,儘可能避免使用String,而應該使用StringBuffer。
    由於String類是不可變的,每個String對象都會獨立佔用內存一塊區域。優化

  3. 儘可能少用靜態變量
    由於靜態變量是全局的,存在方法區,GC不會回收。(用永久代實現的方法區,垃圾回收行爲在這個區域是比較少出現的,垃圾回收器的主要目標是針對常量池和類型的卸載)spa

  4. 避免集中建立對象,尤爲是大對象,若是能夠的話儘可能使用流操做
    JVM會忽然須要大量neicun,這時會出發GC優化系統內存環境對象

  5. 儘可能運用對象池技術以提升系統性能
    生命週期長的對象擁有生命週期短的對象時容易引起內存泄漏,例如大集合對象擁有大數據量的業務對象的時候,能夠考慮分塊進行處理,而後解決一塊釋放一塊的策略。生命週期

  6. 不要在常常調用的方法中建立對象,尤爲忌諱在循環中建立對象
    能夠適當的使用hashtable,vector建立一組對象容器,而後從容器中去取這些對象,而不用每次new以後又丟棄。內存

  7. 優化配置字符串

內存溢出的解決方案是什麼:

  1. 從代碼層面進行優化完善,儘可能避免該狀況發生;字符串處理

  2. 調整優化服務器配置:
  • 設置-Xms、-Xmx等
  • 設置NewSize、MaxNewSize相等
  • 設置 Heap size,PermGen space
相關文章
相關標籤/搜索