一、sun jvm的自動收集與編程顯式調用System.gc()是有區別的,
自動回收的線程級別是最低的,如果系統越來越繁忙,壓力越來越大,那麼自動回收的線程運行的機會就會變小,甚至不會運行,結果是內存不能釋放;
不建議使用編程調用System.gc()是因為垃圾收集時,系統會掛起,而編程調用一般是定時處理的,並且用戶線程度高於5,即肯定會被運行(這個我用過,回收效果明顯,做過j2me的朋友肯定會有更深的體會的),所以系統也會定時地被掛起,也就影響到了系統的響應,但並不明顯。
二、綜上所述,在適當的時候調用System.gc()兩次是合適的,注意“兩次”只是個人經驗,大家可以試驗。
三、另外,sun jvm只適合開發環境,即啟動速讀比較快,
在產品或生產環境下,我建議大家使用jrocket vm,從bea的官方網站上可以免費下載;這個vm不僅具有並行和分代垃圾收集的功能(即垃圾收集線程和用戶線程具有同等的優先級,並且可以同時運行,不會掛起系統;垃圾收集具有更細的粒度級),並且可以大幅度提高系統運行性能。