內存泄漏 memory leak:對象可達但不可用;是指程序在申請內存後,沒法釋放已申請的內存空間,一次內存泄露危害能夠忽略,但內存泄露堆積後果很嚴重,不管多少內存,早晚會被佔光。服務器
內存溢出 out of memory:內存大小不夠;是指程序在申請內存時,沒有足夠的內存空間供其使用,出現out of memory;好比申請了一個integer,但給它存了long才能存下的數,那就是內存溢出。性能
儘早釋放無用對象的引用
好的辦法是使用臨時變量的時候,讓引用變量在推出活動域後自動設置爲null,暗示垃圾收集器來收集該對象,防止發生內存泄漏。大數據
程序進行字符串處理時,儘可能避免使用String,而應該使用StringBuffer。
由於String類是不可變的,每個String對象都會獨立佔用內存一塊區域。優化
儘可能少用靜態變量
由於靜態變量是全局的,存在方法區,GC不會回收。(用永久代實現的方法區,垃圾回收行爲在這個區域是比較少出現的,垃圾回收器的主要目標是針對常量池和類型的卸載)spa
避免集中建立對象,尤爲是大對象,若是能夠的話儘可能使用流操做
JVM會忽然須要大量neicun,這時會出發GC優化系統內存環境對象
儘可能運用對象池技術以提升系統性能
生命週期長的對象擁有生命週期短的對象時容易引起內存泄漏,例如大集合對象擁有大數據量的業務對象的時候,能夠考慮分塊進行處理,而後解決一塊釋放一塊的策略。生命週期
不要在常常調用的方法中建立對象,尤爲忌諱在循環中建立對象
能夠適當的使用hashtable,vector建立一組對象容器,而後從容器中去取這些對象,而不用每次new以後又丟棄。內存
優化配置字符串
從代碼層面進行優化完善,儘可能避免該狀況發生;字符串處理