我這篇文章是為了解答為何我們要避免在年輕代GC的時(shí)候掃描老年代谢鹊。所以前面的假設(shè)都是,我們并沒(méi)有剪枝這種邏輯。也就是從最樸素的兩個(gè)分代假設(shè)出發(fā)掀淘,從年輕代出發(fā)全部遍歷一遍,然后就能發(fā)現(xiàn),一方面是年輕代指向老年代的引用會(huì)迫使將老年代也遍歷,另一方面是如果外部引用直接引用老年代對(duì)象而我們并不掃描老年代粱胜,會(huì)出現(xiàn)漏洞。
于是就能看到狐树,我們回收年輕代的時(shí)候焙压,都要面對(duì)的問(wèn)題就是:如何處理老年代。
后面的邏輯就是抑钟,如果我們要遍歷老年代涯曲,那么代價(jià)就太大,所以我們要避免遍歷老年代在塔。避免遍歷老年代幻件,那就是跨代引用成為GC root。然后前面兩個(gè)人評(píng)論的心俗,為何到老年代要停下來(lái)——即所謂的剪枝,也是因?yàn)槟贻p代的回收跑過(guò)去遍歷老年代是一種開(kāi)銷大而且收益小的行為。
為什么跨代引用是GC root昨日城榛,有人在一個(gè)JVM群里問(wèn)了一個(gè)問(wèn)題揪利,為什么跨代引用是gc root。這雖然是一個(gè)很簡(jiǎn)單的問(wèn)題狠持,但是其實(shí)涉及到了分代垃圾回收算法的核心理念疟位。 gc root的基本解釋 首先...