開發(fā)這個(gè)垃圾收集器的是為了降低用戶使用語言的難度,回避掉內(nèi)存使用的囧事(比如內(nèi)存泄漏)。垃圾收集器工作時(shí),需要掛起用戶程序,等待釋放出不占用的資源后才可繼續(xù)工作。如何提高垃圾收集器的性能顯得非常重要。
1. 垃圾收集器什么時(shí)候工作比較合適
垃圾收集器會在內(nèi)存耗盡或內(nèi)存分配達(dá)到某個(gè)閾值時(shí)才進(jìn)行工作。內(nèi)存耗盡要進(jìn)行垃圾收集是自然的,但是這個(gè)閾值到底該多大才合適呢?太小會造成垃圾收集頻率太高,太大會造成內(nèi)存利用率降低。這里我只是簡單地?zé)o視這個(gè)問題,等到內(nèi)存耗盡再進(jìn)行回收。
2. 多少個(gè)分代才合適
垃圾收集器一個(gè)工作周期時(shí)長極大地依賴于一次收集中存活下來的數(shù)據(jù)。分代越小,時(shí)間越短,然而,一個(gè)較小的分代會比較大的分代更容易填滿,從而增大了收集的頻率,除非我們更早地提升對象。但是,分代收集是希望盡可能多的對象中年輕的時(shí)候死亡,所以對象不應(yīng)該被過早地提升。這里我只是簡單地抄襲了.NET,分成三代。
3. 分代的大小是固定的
Generation的大小如果能隨著內(nèi)存使用情況來改變就好了,不知道要根據(jù)啥規(guī)律來折騰,心理沒譜。
4. 一剛開始垃圾收集器申請的內(nèi)存也是固定大小的
如果內(nèi)存耗盡,垃圾收集后仍然無法提供足夠的內(nèi)存分配給對象,此時(shí)我就只能拋出異常了。有在考慮說,是不是要擴(kuò)大這個(gè)內(nèi)存,重新申請,重新分配Generation,到底要根據(jù)啥規(guī)律比較合適暫時(shí)還沒明白。
5. 什么時(shí)候提升對象
一個(gè)對象什么時(shí)候提升依賴于這個(gè)對象必須在多少次收集中幸存下來。這里我只是簡單地在每次收集后就提升所有的對象,即使某些提升的對象實(shí)際上很年輕,會使得年輕對象沒有死亡機(jī)會。
到這里關(guān)于垃圾收集器的討論就告一段落了,歡迎大家來噴~
posted on 2010-05-14 16:34
Lyt 閱讀(1847)
評論(2) 編輯 收藏 引用 所屬分類:
垃圾收集器