微信網(wǎng)頁制作網(wǎng)站長春seo優(yōu)化企業(yè)網(wǎng)絡躍升
- 為什么要標記或記錄跨代引用.
ygc時, 直接把老年代引用的新生代對象(可能是對象區(qū)域)記錄下來當做根, 這其實就是依據(jù)第二假說和第三假說, 強者恒強, 跨代引用少(存在互相引用關(guān)系的兩個對象,是應該傾
向于同時生存或者同時消亡的).
拿ygc老年代跨代引用對象當做根, 首先就免去了直接直接掃描老年代, 因為要遍歷標記哪個新生代的對象存活, 必須從根開始找, 那假如新對象是通過老對象關(guān)聯(lián)著根的, 這種情況是根可達. 這意味著要訪問完所有老年代對象以及他的引用關(guān)系, 才能枚舉剛才的根可達情況. 這顯然很耗時, 這就是在fullgc遍歷. 因此記錄跨代引用就是為了避免這種情況. 造成的好處就是不用羅列根可達對象們的時候, 只用在新生代區(qū)域進行就行了, 不用管老年代對象, 免去其判斷. 將這判斷交給跨代引用的維護. (空間換時間), 這樣ygc停頓時間是較短的
(是以下兩條的討論, 第一:弱分代假說: 弱者居多, 弱者就是指朝生夕死,
第二: 強分代假說: 強者恒強, 一個對象如果能持久一段gc次數(shù)而不消亡, 他突然消亡的可能性就很小, 或者說越難以消亡)