国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

小研究 - 淺析 JVM 中 GC 回收算法與垃圾收集器

這篇具有很好參考價(jià)值的文章主要介紹了小研究 - 淺析 JVM 中 GC 回收算法與垃圾收集器。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

本文主要介紹了JVM虛擬機(jī)中非常重要的兩個(gè)部分,GC 回收算法和垃圾收集器。從可回收對(duì)象的標(biāo)記開(kāi)始,詳細(xì)介紹 了四個(gè)主流的GC算法,詳細(xì)總結(jié)了各自的算法思路及優(yōu)缺點(diǎn), 提出了何種情況下應(yīng)該通常選用哪種算法。

目錄

1 標(biāo)記可回收對(duì)象

1.1?引用計(jì)數(shù)器

1.2?可達(dá)性分析算法

2 垃圾回收算法

2.1?清除算法

2.2?復(fù)制算法

2.3?標(biāo)記 - 整理算法

2.4?分代收集算法

3?結(jié)束語(yǔ)


1 標(biāo)記可回收對(duì)象

堆中幾乎放著所有的對(duì)象實(shí)例,對(duì)堆垃圾回收前的第一步就是要判斷哪些對(duì)象已經(jīng)死亡(即不能再被任何途徑使用的對(duì)象)。這個(gè)過(guò)程就是在后面垃圾收集器頻繁涉及的標(biāo)記過(guò)程。

1.1?引用計(jì)數(shù)器

這個(gè)方法簡(jiǎn)單易懂,就是給對(duì)象添加一個(gè)引用計(jì)數(shù)器,一 旦該對(duì)象被引用,計(jì)數(shù)器 +1,當(dāng)引用失效,計(jì)數(shù)器就 -1。此 時(shí)計(jì)數(shù)器為 0 的對(duì)象就是不可用對(duì)象?,F(xiàn)在幾乎已經(jīng)沒(méi)有JVM使用引用計(jì)數(shù)法來(lái)判斷對(duì)象是否可被回收了,因其無(wú)法解決對(duì)象之間互相循環(huán)引用的問(wèn)題。故現(xiàn)在一般使用下面的可達(dá)性分析算法。

1.2?可達(dá)性分析算法

可達(dá)性算法也叫根搜索法。這個(gè)算法的基本思想就是通過(guò) 一系列”GC Roots“對(duì)象作為起點(diǎn),從這些節(jié)點(diǎn)向下開(kāi)始搜索, 節(jié)點(diǎn)所走過(guò)的路徑稱(chēng)為引用鏈,當(dāng)一個(gè)對(duì)象到GCRoots沒(méi)有任何引用鏈相連的話,則證明此對(duì)象是不可用的。

這里要注意的是,即便在可達(dá)性算法中被判定為不可達(dá)對(duì)象,該對(duì)象也不是要絕對(duì)被清除的,還要經(jīng)歷再次被標(biāo)記才能真正被回收。此時(shí)就需要調(diào)用 finalize() 方法最終判定對(duì)象是否存活。

首先要對(duì)第一次標(biāo)記進(jìn)行一次篩選,以篩選出此對(duì)象是否有必要執(zhí)行finalize() 方法。當(dāng)這個(gè)對(duì)象沒(méi)有覆蓋finalize方法,或者finzlize方法已經(jīng)被虛擬機(jī)調(diào)用過(guò),則被視為“沒(méi)有必要執(zhí)行“,對(duì)象被回收。

如果被判定為“有必要執(zhí)行”,則對(duì)象將會(huì)被放置在 F-Queue 隊(duì)列之中,在第二次GC對(duì)F-Queue中的對(duì)象進(jìn)行標(biāo)記的過(guò)程中, 如果對(duì)象能夠抓住最后一次機(jī)會(huì),與引用鏈上的某一對(duì)象建立聯(lián)系,便可被移出,否則將被回收。

2 垃圾回收算法

垃圾回收算法,又叫GC算法,其中包含標(biāo)記 - 清除算法、 復(fù)制算法、標(biāo)記 - 整理算法和分代收集算法等。下面將詳細(xì)分析一下這四種常用算法。

2.1?清除算法

這是一個(gè)最基礎(chǔ)的收集算法,這個(gè)算法分為標(biāo)記”和”清 除“兩個(gè)階段。首先標(biāo)記出所有需要回收的對(duì)象,也就是用上面可達(dá)性分析算法進(jìn)行的標(biāo)記,在標(biāo)記完成后統(tǒng)一回收所有被標(biāo)記的對(duì)象。它有兩個(gè)不足的地方:效率問(wèn)題和空間問(wèn)題。兩個(gè)過(guò)程的效率都不高而且標(biāo)記清除后會(huì)產(chǎn)生大量不連續(xù)的碎 片,碎片過(guò)多會(huì)導(dǎo)致以后程序運(yùn)行時(shí)需要分配較大對(duì)象時(shí),無(wú)法找到足夠的連續(xù)內(nèi)存,而不得已再次觸發(fā)GC,會(huì)造成GC頻繁,故常用復(fù)制算法和標(biāo)記 - 整理算法作為改進(jìn)算法。

2.2?復(fù)制算法

復(fù)制算法的思路是把內(nèi)存分為大小相同的兩塊,每次只使用其中的一塊。當(dāng)這一塊的內(nèi)存使用完后,就將還存活的對(duì)象復(fù)制到另一塊區(qū),并且整齊排列好,然后再把使用的空間一次清理掉。這樣就使每次的內(nèi)存回收都是對(duì)內(nèi)存區(qū)間的一半進(jìn)行回收,也不用考慮內(nèi)存碎片問(wèn)題,簡(jiǎn)單高效。

這個(gè)算法就和新生代的 from 區(qū)和 to 區(qū)的過(guò)程很像,所以這個(gè)算法比較適合新生代。賦值的時(shí)候因?yàn)槎际呛苄〉膶?duì)象空間,所以效率還是比較高的,但是缺點(diǎn)很明顯,只有一半的內(nèi)存被利用起來(lái),浪費(fèi)了內(nèi)存空間。所以這個(gè)算法不適合老年代, 因?yàn)槔夏甏鷷?huì)存儲(chǔ)大對(duì)象,如果用這個(gè)算法就會(huì)導(dǎo)致內(nèi)存不足次數(shù)變頻繁,會(huì)使 Major GC 變頻繁,導(dǎo)致效率降低。

2.3?標(biāo)記 - 整理算法

標(biāo)記 - 整理算法也叫標(biāo)記 - 壓縮算法,標(biāo)記過(guò)程和“標(biāo)記 - 清除”算法一樣,基本思路是讓所有存活的對(duì)象向一端移動(dòng),然后直接清理掉邊界以外的內(nèi)存。這樣做直接避免了標(biāo)記 - 清除算法的碎片問(wèn)題和復(fù)制算法所涉及的空間問(wèn)題。這也是操作系統(tǒng)中常用的緊湊操作,緊湊操作之后再執(zhí)行動(dòng)態(tài)重定位分區(qū)分配算法,更新內(nèi)存中存活對(duì)象的新地址。

2.4?分代收集算法

現(xiàn)在的商用虛擬機(jī)的垃圾收集器基本都采用 " 分代收集 " 算法,這種算法就是根據(jù)對(duì)象存活周期的不同將內(nèi)存分為幾塊。 一般將java堆分為新生代和老年代,這樣我們就可以根據(jù)各個(gè)年代的特點(diǎn)選擇合適的垃圾收集算法。其實(shí)就是上面幾個(gè)算法的匯總。

3?結(jié)束語(yǔ)

本文主要介紹了怎樣判定一個(gè)算法是否被回收,以及四種常用的垃圾回收算法各自的思路及優(yōu)缺點(diǎn)。

一般年輕代中執(zhí)行 GC 后,會(huì)有少量的對(duì)象存活,就會(huì)選用復(fù)制算法,只要付出少量的存活對(duì)象復(fù)制成本就可以完成收集。而老年代中因?yàn)閷?duì)象存活率高,沒(méi)有額外過(guò)多內(nèi)存空間對(duì) 它進(jìn)行分配擔(dān)保,就需要使用標(biāo)記 - 清理或者標(biāo)記 - 整理算法來(lái)進(jìn)行回收。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-620267.html

到了這里,關(guān)于小研究 - 淺析 JVM 中 GC 回收算法與垃圾收集器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java】圖解 JVM 垃圾回收(一):GC 判斷策略、引用類(lèi)型、垃圾回收算法

    【Java】圖解 JVM 垃圾回收(一):GC 判斷策略、引用類(lèi)型、垃圾回收算法

    垃圾 是指運(yùn)行程序中 沒(méi)有任何引用指向的對(duì)象 ,需要被回收。 內(nèi)存溢出 :經(jīng)過(guò)垃圾回收之后,內(nèi)存仍舊無(wú)法存儲(chǔ)新創(chuàng)建的對(duì)象,內(nèi)存不夠溢出。 內(nèi)存泄漏 :又叫 “ 存儲(chǔ)泄漏 ”,對(duì)象不會(huì)再被程序使用了,但是 GC 又不能回收它們。例如:IO 流不適用了但是沒(méi)有被 Close、

    2024年02月19日
    瀏覽(25)
  • 【JVM】JVM垃圾收集器

    【JVM】JVM垃圾收集器

    垃圾收集器是負(fù)責(zé) 執(zhí)行垃圾回收的組件 ,它們用于 管理Java程序運(yùn)行時(shí)的內(nèi)存分配和釋放 。垃圾收集器的主要任務(wù)是 自動(dòng)回收不再使用的內(nèi)存對(duì)象 ,并將 內(nèi)存空間重新回收 以供程序繼續(xù)使用。 Serial和Serial Old串行垃圾收集器,是指 使用單線程進(jìn)行垃圾回收 ,堆內(nèi)存較小,

    2024年02月13日
    瀏覽(64)
  • JVM——分代收集理論和垃圾回收算法

    JVM——分代收集理論和垃圾回收算法

    弱分代假說(shuō) :絕大多數(shù)對(duì)象都是朝生夕滅的。 強(qiáng)分代假說(shuō) :熬過(guò)越多次垃圾收集過(guò)程的對(duì)象越難以消亡。 ????????這兩個(gè)分代假說(shuō)共同奠定了多款常用的垃圾收集器的一致的設(shè)計(jì)原則: 收集器應(yīng)該將Java堆劃分出不同的區(qū)域 ,然后將 回收對(duì)象依據(jù)其年齡 (年齡即對(duì)象熬

    2024年02月12日
    瀏覽(31)
  • JVM 垃圾收集器

    JVM 垃圾收集器

    重點(diǎn):CMS,G1,ZGC 主要垃圾收集器如下,圖中標(biāo)出了它們的工作區(qū)域、垃圾收集算法,以及配合關(guān)系。 Serial 收集器 Serial 收集器是最基礎(chǔ)、歷史最悠久的收集器。 如同它的名字(串行),它是一個(gè)單線程工作的收集器,使用一個(gè)處理器或一條收集線程去完成垃圾收集工作。

    2024年02月10日
    瀏覽(55)
  • JVM的故事——垃圾收集器

    JVM的故事——垃圾收集器

    新生代收集器,最基礎(chǔ)的收集器,單線程。進(jìn)行垃圾收集時(shí)必須暫停其他所有工作線程,stop the world 新生代收集器,實(shí)質(zhì)上是serial收集器的多線程版本。除了serial,只有它能和CMS收集器(老年代收集器)配合工作。隨著處理器核心數(shù)越來(lái)越多,parnew比serial有著更好的性能。(但如

    2024年02月10日
    瀏覽(29)
  • JVM--- 垃圾收集器詳細(xì)整理

    JVM--- 垃圾收集器詳細(xì)整理

    目錄 一、垃圾收集需要考慮的三個(gè)事情: 二、垃圾回收針對(duì)的區(qū)域 三、如何判斷對(duì)象已死 ? ? ? ? 1.引用計(jì)數(shù)算法: ? ? ? ? 2.可達(dá)性分析算法 四、引用 五、生存還是死亡? 六、回收方法區(qū) 七、垃圾收集算法 ? ? ? ? 1.分代收集理論 2.標(biāo)記-清除算法 ????????3.標(biāo)記

    2024年02月19日
    瀏覽(30)
  • JVM ZGC垃圾收集器

    JVM ZGC垃圾收集器

    ZGC(“Z”并非什么專(zhuān)業(yè)名詞的縮寫(xiě),這款收集器的名字就叫作Z Garbage Collector)是一款在JDK 11中新加入的具有實(shí)驗(yàn)性質(zhì)[1]的低延遲垃圾收集器,是由Oracle公司研發(fā)的。 ZGC收集器 是一款基于Region內(nèi)存布局的,(暫時(shí))不設(shè)分代的,使用了讀屏障、染色指針和內(nèi)存多重映射等技術(shù)

    2024年02月10日
    瀏覽(24)
  • 08-JVM垃圾收集器詳解

    08-JVM垃圾收集器詳解

    上一篇:07-垃圾收集算法詳解 如果說(shuō)收集算法是內(nèi)存回收的方法論,那么垃圾收集器就是內(nèi)存回收的具體實(shí)現(xiàn)。 雖然我們對(duì)各個(gè)收集器進(jìn)行比較,但并非為了挑選出一個(gè)最好的收集器。因?yàn)橹钡浆F(xiàn)在為止還沒(méi)有最好的垃圾收集器出現(xiàn),更加沒(méi)有萬(wàn)能的垃圾收集器,我們能做

    2024年02月09日
    瀏覽(30)
  • 深入理解JVM垃圾收集器

    深入理解JVM垃圾收集器

    相關(guān)系列 深入理解JVM垃圾收集算法-CSDN博客 目前市面常見(jiàn)的垃圾收集器有Serial、ParNew、Parallel、CMS、Serial Old、Parallel Old、G1、ZGC以及有二種不常見(jiàn)的Epsilon、Shenandoah的,從上圖可以看到有連線的的垃圾收集器是可以組合使用,是年輕代+老年代。為什么會(huì)出現(xiàn)這么多的垃圾收集

    2024年04月09日
    瀏覽(24)
  • JVM:垃圾收集器(7種)

    JVM:垃圾收集器(7種)

    如果兩個(gè)收集器之間存在連線,就說(shuō)明它們可以搭配使用。它們說(shuō)在的區(qū)域則表示這個(gè)收集器屬于新生代收集器還是老年代收集器。其中Serial(串行)、Parallel(并行) ? ? ? ? Serial收集器是最基礎(chǔ)、歷史最悠久的收集器,是HotSpot虛擬機(jī)新生代收集器的唯一選擇。這個(gè)收集器

    2024年01月20日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包