在大多數(shù)情況下,最好的做法是不強(qiáng)制垃圾收集。(我研究過(guò)的每一個(gè)系統(tǒng)都強(qiáng)制垃圾收集,有一些突出的問題,如果解決了這些問題,就會(huì)消除強(qiáng)制垃圾收集的需要,并且大大加快了系統(tǒng)的速度。)
有一個(gè)少數(shù)案件什么時(shí)候你,你們比垃圾收集器更了解內(nèi)存使用情況。在多用戶應(yīng)用程序或一次響應(yīng)多個(gè)請(qǐng)求的服務(wù)中,這不太可能是正確的。
然而,在一些批式處理你知道的比GC更多。例如,考慮一個(gè)應(yīng)用程序。
- 給出命令行上的文件名列表。
- 處理單個(gè)文件,然后將結(jié)果寫入結(jié)果文件。
- 在處理文件時(shí),創(chuàng)建許多相互鏈接的對(duì)象,在文件處理完成之前無(wú)法收集這些對(duì)象(例如,解析樹)。
在已處理的文件之間保持不多狀態(tài)。.
你,你們可以,可能能夠(經(jīng)過(guò)仔細(xì)的)測(cè)試,在處理每個(gè)文件之后強(qiáng)制進(jìn)行一個(gè)完整的垃圾收集。
另一種情況是每隔幾分鐘喚醒一次處理某些項(xiàng)目的服務(wù),并且不會(huì)在睡覺的時(shí)候保持任何狀態(tài)..然后在睡覺前強(qiáng)迫一個(gè)完整的集合可以,可能值得。
當(dāng)我知道最近創(chuàng)建了很多對(duì)象,并且當(dāng)前引用的對(duì)象很少時(shí),我才會(huì)考慮強(qiáng)制收集。
我寧愿有一個(gè)垃圾收集API,當(dāng)我可以給它關(guān)于這類事情的提示時(shí),而不必強(qiáng)迫GC自己。
亦見“里科·馬里亞尼的表演奇聞"