內存優化暢想系列文章已經結束了,很多讀者讀完之后可能覺得“然并卵”,畢竟都是給微軟提的建議而已,現在都沒有實現。那么為了優化內存,有沒有什么我們現在就能用的技巧呢?我的答案是:有。網上關于.net內存優化的文章有許多,我不想一一轉載,這里只介紹兩個我自己想到的方法,如有雷同,純屬巧合。當然,我只是.net的業余愛好者,實踐經驗有限,所說的方法也只是理論分析得出的而已,并未經過實際測試驗證,所以也未必正確,歡迎讀者批評指正。
1. 即使是“垃圾”對象之間的互相引用,也應(在其成為垃圾之前)盡可能解除。可能有人認為這樣做沒有必要,因為都是垃圾對象了,下次GC時就都會被釋放了,它們之間存在互相引用,又有什么關系呢?這種想法忽略了一個事實----GC是分代進行的。如果一個1代或2代的垃圾對象保有一個0代垃圾對象的引用,那么下次發生0代GC時,這個0代垃圾是不會被回收的,要等到1代或2代GC時才會跟引用它的垃圾一起回收。這就導致了本該盡早回收的對象真正被回收的時間晚了許多,年輕代的回收不徹底,可能無法釋放足夠的內存,進而引發更多次的GC。
2. 巧用弱引用緩存對象。使用弱引用實現緩存最合適了,能夠自動根據內存壓力釋放緩存對象,取得平衡。保存對某些垃圾對象的弱引用,可以在GC之前隨時“從垃圾里撿出寶貝”,實現“廢物利用”,使得真正分配對象的次數減少,能夠大大減輕GC的壓力,降低內存“占用率”的同時提高內存“利用率”。這里就不展開詳說了,等有時間我打算寫一個弱引用緩存類,供大家研究。
新聞熱點
疑難解答