溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

java垃圾回收算法中復(fù)制算法的原理是什么

發(fā)布時(shí)間:2022-01-14 11:01:58 來源:億速云 閱讀:125 作者:iii 欄目:大數(shù)據(jù)

今天小編給大家分享一下java垃圾回收算法中復(fù)制算法的原理是什么的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

算法原理

復(fù)制算法首先將或者的內(nèi)存空間分為2塊,每次只使用其中一塊,在垃圾會(huì)搜時(shí)將正在使用的內(nèi)存中的存活對(duì)象復(fù)
制到未被使用的內(nèi)存塊中,之后清楚正在使用的內(nèi)存塊中的所有對(duì)象,交換2個(gè)內(nèi)存的角色,最后完成垃圾回收。

java垃圾回收算法中復(fù)制算法的原理是什么  
image

年輕代中的GC

HotSpot JVM把年輕代分為了三部分:1個(gè)Eden區(qū)和2個(gè)Survivor區(qū)(分別叫fromto)。默認(rèn)比例為8:1,為啥默認(rèn)會(huì)是這個(gè)比例,接下來我們會(huì)聊到。一般情況下,新創(chuàng)建的對(duì)象都會(huì)被分配到Eden區(qū)(一些大對(duì)象特殊處理),這些對(duì)象經(jīng)過第一次Minor GC后,如果仍然存活,將會(huì)被移到Survivor區(qū)。對(duì)象在Survivor區(qū)中每熬過一次Minor GC,年齡就會(huì)增加1歲,當(dāng)它的年齡增加到一定程度時(shí),就會(huì)被移動(dòng)到年老代中。

因?yàn)槟贻p代中的對(duì)象基本都是朝生夕死的(80%以上),所以在年輕代的垃圾回收算法使用的是復(fù)制算法,復(fù)制算法的基本思想就是將內(nèi)存分為兩塊,每次只用其中一塊,當(dāng)這一塊內(nèi)存用完,就將還活著的對(duì)象復(fù)制到另外一塊上面。復(fù)制算法不會(huì)產(chǎn)生內(nèi)存碎片。

GC開始的時(shí)候,對(duì)象只會(huì)存在于Eden區(qū)和名為“From”的Survivor區(qū),Survivor區(qū)“To”是空的。緊接著進(jìn)行GC,Eden區(qū)中所有存活的對(duì)象都會(huì)被復(fù)制到“To”,而在“From”區(qū)中,仍存活的對(duì)象會(huì)根據(jù)他們的年齡值來決定去向。年齡達(dá)到一定值(年齡閾值,可以通過-XX:MaxTenuringThreshold來設(shè)置)的對(duì)象會(huì)被移動(dòng)到年老代中,沒有達(dá)到閾值的對(duì)象會(huì)被復(fù)制到“To”區(qū)域。經(jīng)過這次GC后,Eden區(qū)From區(qū)已經(jīng)被清空。這個(gè)時(shí)候,“From”和“To”會(huì)交換他們的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。不管怎樣,都會(huì)保證名為To的Survivor區(qū)域是空的。Minor GC會(huì)一直重復(fù)這樣的過程,直到“To”區(qū)被填滿,“To”區(qū)被填滿之后,會(huì)將所有對(duì)象移動(dòng)到年老代中。

存在問題

由于JVM中的絕大多數(shù)對(duì)象都是瞬時(shí)狀態(tài)的,生命周期非常短暫,所以復(fù)制算法被廣泛應(yīng)用于年輕代中。分區(qū)、復(fù)制的思路不僅大幅提升了垃圾回收的效率,而且也將原本復(fù)雜的內(nèi)存分配算法變的前所未有的簡(jiǎn)明扼要(既然每次內(nèi)存回收都是對(duì)整個(gè)半?yún)^(qū)空間的回收,內(nèi)存分配時(shí)也就不用考慮內(nèi)存碎片等復(fù)雜情況,只要移動(dòng)堆頂指針,按順序分配內(nèi)存就可以了)。
不過在垃圾收集技術(shù)中,復(fù)制算法提高效率的代價(jià)是認(rèn)為的將可用內(nèi)存縮小了一半。

以上就是“java垃圾回收算法中復(fù)制算法的原理是什么”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI