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

分代收集 + 垃圾回收算法

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

分代假說

1. 弱分代假說(Weak Generational Hypothesis):絕大多數(shù)對(duì)象都是朝生夕滅的

2. 強(qiáng)分代假說(Strong Generational Hypothesis):熬過越多次垃圾收集過程的對(duì)象就越難以消亡

3. 跨代引用假說(Intergenerational Reference Hypothesis):跨代引用相對(duì)于同代引用來說僅占極少數(shù)

?? 收集器應(yīng)該將Java堆劃分出不同的區(qū)域,然后將回收對(duì)象依據(jù)其年齡(年齡即對(duì)象熬過垃圾收集過程的次數(shù))分配到不同的區(qū)域之中存儲(chǔ)。

顯而易見,如果一個(gè)區(qū)域中大多數(shù)對(duì)象都是朝生夕滅,難以熬過垃圾收集過程的話,那么把它們集中放在一起,每次回收時(shí)只關(guān)注如何保留少量存活而不是去標(biāo)記那些大量將要被回收的對(duì)象(解釋1),就能以較低代價(jià)回收到大量的空間;如果剩下的都是難以消亡的對(duì)象,那把它們集中放在一塊,虛擬機(jī)便可以使用較低的頻率來回收這個(gè)區(qū)域,這就同時(shí)兼顧了垃圾收集的時(shí)間開銷和內(nèi)存的空間有效利用(解釋2)。

 解釋1:

分代收集 + 垃圾回收算法,JVM,java,jvm,算法

 解釋2:

????????時(shí)間開銷 ——> 支取掃描1%,比掃描99%快得多;
????????內(nèi)存空間有效利用 ——> 1%移動(dòng)時(shí)不會(huì)直接移動(dòng),而是復(fù)制一份,將復(fù)制移動(dòng)過去,成功后,刪除原有的。


新生代 ——?存放朝生夕死的對(duì)象

老年代 ——?存放新生代回收后還存活的對(duì)象,不容易死的對(duì)象

?? 在新生代中,每次垃圾收集時(shí)都發(fā)現(xiàn)有大批對(duì)象死去,而每次回收后存活的少量對(duì)象,將會(huì)逐步晉升(解釋3)到老年代中存放。

 解釋3:

分代收集 + 垃圾回收算法,JVM,java,jvm,算法

?當(dāng)年齡達(dá)到13時(shí),就進(jìn)入老年代


跨代引用

分代收集有一個(gè)問題:跨代引用

比如說新生代中有一個(gè)對(duì)象A引用老年代的一個(gè)對(duì)象 B,只要老年代的對(duì)象不回收,新生代的這個(gè)對(duì)象也不會(huì)被回收。每次新生代回收時(shí)還是要去掃(判斷A是否需要回收,此時(shí)也需要去判斷A引用的B是否被回收),也不能直接將A放入老年代,因?yàn)榭赡茉贏的年齡為12時(shí),對(duì)象B就被回收了。

解決跨代引用的問題

?? 存在互相引用關(guān)系的兩個(gè)對(duì)象,是應(yīng)該傾向于同時(shí)生存或者同時(shí)消亡的。

舉個(gè)例子,如果某個(gè)新生代對(duì)象存在跨代引用,由于老年代對(duì)象難以消亡,該引用會(huì)使得新生代對(duì)象在收集時(shí)同樣得以存活,進(jìn)而在年齡增長之后晉升到老年代中,這時(shí)跨代引用也隨即被消除了。

跨代引用只占極少數(shù),就不應(yīng)再為了少量的跨代引用去掃描整個(gè)老年代,也不必浪費(fèi)空間專門記錄每一個(gè)對(duì)象是否存在及存在哪些跨代引用,只需在新生代上建立一個(gè)全局的數(shù)據(jù)結(jié)構(gòu)(該結(jié)構(gòu)被稱為“記憶集”,Remembered Set)。這個(gè)結(jié)構(gòu)把老年代劃分成若干小塊,標(biāo)識(shí)出老年代的哪一塊內(nèi)存會(huì)存在跨代引用。
一旦出現(xiàn)跨代引用,就會(huì)出現(xiàn)在老年代的跨代引用區(qū)域。當(dāng)發(fā)生新生代收集時(shí),只有包含了跨代引用的小塊內(nèi)存里的對(duì)象會(huì)進(jìn)行掃描。
分代收集 + 垃圾回收算法,JVM,java,jvm,算法

雖然這種方法需要在對(duì)象改變引用關(guān)系(如將自己或者某個(gè)屬性賦值)時(shí)維護(hù)記錄數(shù)據(jù)的正確性,會(huì)增加一些運(yùn)行時(shí)的開銷,但比起收集時(shí)掃描整個(gè)老年代來說仍然是劃算的。

垃圾回收算法

一、標(biāo)記-清除算法

標(biāo)記:哪些對(duì)象可以存活或者哪些對(duì)象可以回收

它的主要缺點(diǎn)有兩個(gè):

  • 第一個(gè)是執(zhí)行效率不穩(wěn)定。
    如果Java堆中包含大量對(duì)象,而且其中大部分是需要被回收的,這時(shí)必須進(jìn)行大量標(biāo)記和清除的動(dòng)作,導(dǎo)致標(biāo)記和清除兩個(gè)過程的執(zhí)行效率都隨對(duì)象數(shù)量增長而降低;

  • 第二個(gè)是內(nèi)存空間的碎片化問題。
    標(biāo)記、清除之后會(huì)產(chǎn)生大量不連續(xù)的內(nèi)存碎片,空間碎片太多可能會(huì)導(dǎo)致當(dāng)以后在程序運(yùn)行過程中需要分配較大對(duì)象時(shí)無法找到足夠的連續(xù)內(nèi)存而不得不提前觸發(fā)另一次垃圾收集動(dòng)作。

基本不使用

二、標(biāo)記-復(fù)制算法

根據(jù)IBM研究,新生代中的對(duì)象有98%熬不過第一輪收集(普通場(chǎng)景下,無法保證每次都是這樣),因此不需要按照1:1的比例來劃分新生代的內(nèi)存空間,而是使用了8:1:1分配內(nèi)存空間。

分代收集 + 垃圾回收算法,JVM,java,jvm,算法

?每次進(jìn)行收集時(shí),將前8:1空間的存活對(duì)象一次性復(fù)制到另外的1比例,然后清理掉前8:1空間的朝生夕死的對(duì)象。

?? 內(nèi)存的分配擔(dān)保好比我們?nèi)ャy行借款,如果我們信譽(yù)很好,在98%的情況下都能按時(shí)償還,于是銀行可能會(huì)默認(rèn)我們下一次也能按時(shí)按量地償還貸款,只需要有一個(gè)擔(dān)保人能保證如果我不能還款時(shí),可以從他的賬戶扣錢,那銀行就認(rèn)為沒有什么風(fēng)險(xiǎn)了。

標(biāo)記-復(fù)制算法雖然彌補(bǔ)了標(biāo)記-清除算法的缺點(diǎn),但標(biāo)記-復(fù)制算法還是有自己的缺點(diǎn):

首先就是在對(duì)象存活率較高時(shí)要進(jìn)行較多的復(fù)制操作,效率將會(huì)降低

還有一種情況,就是在十分之九的的對(duì)象里超過十分之一存活,那么復(fù)制到右邊區(qū)域時(shí)空間大小就不夠了。

為了解決這些,出現(xiàn)了標(biāo)記-整理算法。

三、標(biāo)記-整理算法

標(biāo)記過程仍與標(biāo)記-清除算法相同,但后續(xù)讓所有存活的對(duì)象都向內(nèi)存空間一端移動(dòng),然后直接清理掉邊界以外的內(nèi)存。

弊端

  • 像在老年代這種每次回收都有大量對(duì)象存活區(qū)域,移動(dòng)存活對(duì)象并更新所有引用這些對(duì)象的地方將會(huì)是一種極為負(fù)重的操作,而且這種對(duì)象移動(dòng)操作必須全程暫停用戶應(yīng)用程序(解釋4)才能進(jìn)行 ——> 宕機(jī) stop the world 

但不移動(dòng)的話,碎片化問題嚴(yán)重,得不到解決也會(huì)導(dǎo)致性能、存儲(chǔ)量降低。

解釋4:

如果不暫停的話,剛標(biāo)記的時(shí)候只占據(jù)一塊,標(biāo)記完以后整理時(shí)可能就變成了占據(jù)了兩塊。

?? 通常標(biāo)記-清除算法也是需要停頓用戶線程來標(biāo)記、清理可回收對(duì)象的,只是停頓時(shí)間相對(duì)而言要來的短而已。

于是混合式出現(xiàn)了,讓虛擬機(jī)平時(shí)多數(shù)時(shí)間都采用標(biāo)記-清除算法,暫時(shí)容忍內(nèi)存碎片的存在,直到內(nèi)存空間的碎片化程度已經(jīng)大到影響對(duì)象分配時(shí),再采用標(biāo)記-整理算法收集一次,以獲得規(guī)整的內(nèi)存空間。文章來源地址http://www.zghlxwxcb.cn/news/detail-659681.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(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)文章

  • JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過程、可用的垃圾回收器類型

    JVM的組件、自動(dòng)垃圾回收的工作原理、分代垃圾回收過程、可用的垃圾回收器類型

    https://www.processon.com/diagraming/64c8aa11c07d99075d934311 https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 年輕代是所有新對(duì)象被分配和老化的地方。當(dāng)年輕代填滿時(shí),這會(huì)導(dǎo)致minor garbage collection,minor gc會(huì)回收掉很多的游離對(duì)象。游離的年輕代很快就被收集起來。一些幸存的

    2024年02月14日
    瀏覽(65)
  • 分代收集 + 垃圾回收算法

    分代收集 + 垃圾回收算法

    1. 弱分代假說(Weak Generational Hypothesis):絕大多數(shù)對(duì)象都是朝生夕滅的 2. 強(qiáng)分代假說(Strong Generational Hypothesis):熬過越多次垃圾收集過程的對(duì)象就越難以消亡 3. 跨代引用假說(Intergenerational Reference Hypothesis):跨代引用相對(duì)于同代引用來說僅占極少數(shù) ?? 收集器應(yīng)該將J

    2024年02月12日
    瀏覽(30)
  • 小研究 - 淺析 JVM 中 GC 回收算法與垃圾收集器

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

    2024年02月14日
    瀏覽(23)
  • JVM垃圾回收——G1垃圾收集器

    JVM垃圾回收——G1垃圾收集器

    目錄 一、什么是G1垃圾收集器 二、G1垃圾收集器的內(nèi)存劃分 三、G1垃圾收集器的收集過程 ?四、G1收集器的優(yōu)缺點(diǎn) 五、G1收集器的JVM參數(shù)配置 ????????Garbage First(簡稱G1)收集器是垃圾收集器技術(shù)發(fā)展史上里程碑式的成果,它摒棄了傳統(tǒng)垃圾收集器的嚴(yán)格的內(nèi)存劃分,而是采

    2024年02月05日
    瀏覽(26)
  • 【Java】圖解 JVM 垃圾回收(一):GC 判斷策略、引用類型、垃圾回收算法

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

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

    2024年02月19日
    瀏覽(26)
  • Java虛擬機(jī)(JVM):垃圾收集算法

    Java虛擬機(jī)(JVM):垃圾收集算法

    目錄 一、分代收集理論 二、標(biāo)記-清除算法 三、標(biāo)記-復(fù)制算法? 四、標(biāo)記-整理算法 分代收集理論建立在兩個(gè)分代假說之上: 1、弱分代假說:絕大多數(shù)對(duì)象都是朝生夕滅的。 2、強(qiáng)分代假說:熬過越多次垃圾收集過程的對(duì)象就越難以消亡。 這兩個(gè)分代假說共同奠定了多款垃

    2024年02月12日
    瀏覽(25)
  • 【Java虛擬機(jī)】JVM垃圾回收機(jī)制和常見回收算法原理

    【Java虛擬機(jī)】JVM垃圾回收機(jī)制和常見回收算法原理

    1.垃圾回收機(jī)制 (1)什么是垃圾回收機(jī)制(Garbage Collection, 簡稱GC) 指自動(dòng)管理動(dòng)態(tài)分配的內(nèi)存空間的機(jī)制,自動(dòng)回收不再使用的內(nèi)存,以避免內(nèi)存泄漏和內(nèi)存溢出的問題 最早是在1960年代提出的,程序員需要手動(dòng)管理內(nèi)存的分配和釋放 這往往會(huì)導(dǎo)致內(nèi)存泄漏和內(nèi)存溢出等問

    2024年02月02日
    瀏覽(37)
  • 【JVM】JVM 垃圾回收算法

    【JVM】JVM 垃圾回收算法

    目前JVM中有三種常見的垃圾回收算法,分別是:標(biāo)記清除、標(biāo)記整理和復(fù)制,這三種垃圾回收算法各有優(yōu)缺點(diǎn),下面逐一介紹。 在讀本篇文章中,如果對(duì)JVM中哪個(gè)是垃圾,哪個(gè)不是垃圾,JVM到底是怎么知道的,請(qǐng)先讀下面這篇文章 【JVM】JVM 判斷對(duì)象存活算法(引用計(jì)數(shù)算法

    2024年02月09日
    瀏覽(27)
  • 【JVM】JVM中的分代回收

    【JVM】JVM中的分代回收

    什么是分代 在java8時(shí),堆被分為了兩份: 新生代和老年代 【1:2】 其中: 對(duì)于 新生代 ,內(nèi)部又被分為了 三個(gè)區(qū)域。 伊甸園區(qū)Eden ,新生的對(duì)象都分配到這里 幸存者區(qū)survivor (分成from和to) Eden區(qū),from區(qū),to區(qū)【8:1:1】 分代收集算法-工作機(jī)制 新 創(chuàng)建的 對(duì)象 ,都會(huì)先 分配

    2024年02月13日
    瀏覽(26)
  • JVM基礎(chǔ)(5)——JVM垃圾回收算法

    JVM基礎(chǔ)(5)——JVM垃圾回收算法

    作者簡介:大家好,我是smart哥,前中興通訊、美團(tuán)架構(gòu)師,現(xiàn)某互聯(lián)網(wǎng)公司CTO 聯(lián)系qq:184480602,加我進(jìn)群,大家一起學(xué)習(xí),一起進(jìn)步,一起對(duì)抗互聯(lián)網(wǎng)寒冬 學(xué)習(xí)必須往深處挖,挖的越深,基礎(chǔ)越扎實(shí)! 階段1、深入多線程 階段2、深入多線程設(shè)計(jì)模式 階段3、深入juc源碼解析

    2024年02月02日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包