您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關(guān) JVM中的垃圾收集算法是怎么樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
1,標(biāo)記-清除算法
概念:首先標(biāo)記出所有需要回收的對(duì)象,在標(biāo)記完成后統(tǒng)一回收所有標(biāo)記的對(duì)象。 特點(diǎn): 1)效率問(wèn)題:標(biāo)記和清除的效率都不高。 2)空間問(wèn)題:標(biāo)記清除之后會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片,碎片太多可能會(huì)導(dǎo)致以后需要分配較大的對(duì)象時(shí),因無(wú)法找到足夠大的連續(xù)內(nèi)存而不得不提前觸發(fā)另一次垃圾收集的動(dòng)作。
2,復(fù)制算法
概念:將可用的內(nèi)存分為(容量)大小相等的兩塊,每次只使用其中的一塊。當(dāng)這一塊的內(nèi)存用完后,就將還存活的對(duì)象復(fù)制到另一塊上面,然后再把已使用過(guò)的內(nèi)存塊一次性清理掉。 特點(diǎn): 1)效率:實(shí)現(xiàn)簡(jiǎn)單,運(yùn)行效率高 2)空間問(wèn)題:將內(nèi)存的大小縮小為原來(lái)的一半 應(yīng)用:新生代的回收 提醒: 1)新生代中大部分的對(duì)象時(shí)“朝生夕死”的,所有并不需要安裝1:1的比例來(lái)劃分內(nèi)存空間。 2)虛擬機(jī)將新生代內(nèi)存分為一塊較大的Eden空間和兩塊較小的Survivor空間(Survivor to和Survivor from),每次使用Eden空間和其中一塊Survivor空間。 過(guò)程: 1)每次創(chuàng)建對(duì)象時(shí),首先會(huì)在Eden中分配,若Eden已滿,則在Survior from中分配,如果Eden和Survior from都無(wú)法容納這個(gè)對(duì)象,則JVM會(huì)進(jìn)行一次GC; 2)GC時(shí),將Eden和Survivor from中還存活的對(duì)象一次性地復(fù)制到另外一塊Survivor to空間上,最后清理掉Eden和Survivor form空間; 3)當(dāng)Survivor to空間不夠用時(shí),需要依賴?yán)夏甏M(jìn)行分配擔(dān)保。 例如:HotSpot虛擬機(jī)默認(rèn)Eden和兩個(gè)Survivor的大小比例是8:1:1,也就是每次新生代中可用內(nèi)存的空間為整個(gè)新生代容量的90%,只有10%的內(nèi)存會(huì)被浪費(fèi)掉。 內(nèi)存分配擔(dān)保機(jī)制: 在新生代GC(Minor GC)前,虛擬機(jī)會(huì)先檢查老年代中可用的最大連續(xù)空間是否大于新生代所有對(duì)象的總空間 1)如果滿足條件,那么新生代GC就可以確保是安全的 2)如果不滿足條件,則虛擬機(jī)會(huì)查看HandlePromotionFailure設(shè)置是否允許擔(dān)保失敗。 如果允許擔(dān)保失敗,那么會(huì)繼續(xù)檢查老年代中可用的最大連續(xù)空間是否大于歷次晉升到老年代的對(duì)象的平均大小, 如果大于,將會(huì)進(jìn)行一次新生代GC,盡管這次新生代GC是有風(fēng)險(xiǎn)的 如果小于,那么這時(shí)不會(huì)進(jìn)行新生代GC,而是改為進(jìn)行一次老年代GC(Full GC) 如果不允許擔(dān)保失敗,那么這時(shí)不會(huì)進(jìn)行新生代GC,而是改為進(jìn)行一次老年代GC(Full GC)
3,標(biāo)記-整理算法
概念:概念:首先標(biāo)記出所有需要回收的對(duì)象,在標(biāo)記完成后讓所有存活的對(duì)象都向一端移動(dòng),然后直接清理掉沒(méi)有存活對(duì)象的另一端。
4,分代收集算法
Java堆分為新生代和老年代,在新生代中采用 復(fù)制算法 回收,在老年代中使用 標(biāo)記-清理 或 標(biāo)記-整理 算法來(lái)回收
看完上述內(nèi)容,你們對(duì) JVM中的垃圾收集算法是怎么樣的有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。
免責(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)容。