1.垃圾收集算法的核心思想
java語言提供了自動的GC機制,系統會經常檢查內存,采用對象引用計數的方式,將引用次數為0的對象回收。這樣可以防止兩個危險:(1)防止無用對象占用內存資源 (2)防止有用對象被釋放,引起內存非法引用。
2.觸發GC(Garbage Collector)的條件
(1)應用進程空閑的時候,GC會回收空閑進程的內存資源。
(2)應用進程繁忙的時候,當需要的內存資源不足的時候, GC會強制執行回收優先級比較低的進程資源,如果還是不足,則再回收兩次,還是不足則會報OOM。
3.減少GC開銷的措施
(1)盡量少顯示地調用 System.gc();
(2)減少臨時對象的引用;臨時對象退出函數后 ,
(3)對象使用完后,設置為指向null;這樣會方便系統查找到空對象,更快回收掉內存;
(4)能用int等基本數據類型,就盡量不要使用Integer等引用類型,基本類型占用的資源比引用類型要小得多;
(5)盡量少地使用static變量。static 變量是全局性的,系統在堆中為其分配內存,GC無法回收該內存;
(6)對於需要使用變長的字符串變量,盡量使用StringBuffer而不是String。String每賦值一次,就會重新分配一次內存,String str = str1+str2+str3+str4+str5,每多一個“+”,就會多
創建一個對象。
(7)分散創建和刪除對象的時間。一次性創建或者刪除太多的對象,會導致內存突然變得緊張或者一次性釋放太對,不利用內存的合理使用。