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

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

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

一、分代收集理論

1、三個(gè)假說

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

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

????????這兩個(gè)分代假說共同奠定了多款常用的垃圾收集器的一致的設(shè)計(jì)原則:收集器應(yīng)該將Java堆劃分出不同的區(qū)域,然后將回收對(duì)象依據(jù)其年齡(年齡即對(duì)象熬過垃圾收集過程的次數(shù))分配到不同的區(qū)域之中存儲(chǔ)。

? ? ? ? 把分代收集理論具體放到現(xiàn)在的商用Java虛擬機(jī)中里,設(shè)計(jì)者一般至少會(huì)把Java堆劃分成新生代老年代兩個(gè)區(qū)域。

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

每次回收進(jìn)行后,沒有被回收的對(duì)象年齡加1,加到一定次數(shù)(一般是13),就會(huì)進(jìn)入老年代。

????????如果一個(gè)區(qū)域中大多數(shù)對(duì)象都是朝生夕滅,難以熬過垃圾收集過程的話,那么把它們集中放在一起,每次回收時(shí)只關(guān)注如何保留少量存活而不是去標(biāo)記那些大量將要被回收的對(duì)象,就能以較低代價(jià)回收到大量的空間;如果剩下的都是難以消亡的對(duì)象,那把它們集中放在一塊,虛擬機(jī)便可以使用較低的頻率來回收這個(gè)區(qū)域,這就同時(shí)兼顧了垃圾收集的時(shí)間開銷和內(nèi)存的空間有效利用。
跨代引用問題
????????跨代引用問題:新生代引用了老年代的對(duì)象,老年代不消亡,新生代就不消亡,但是每次回收還需要掃描,看老年代有沒有被回收,需要遍歷老年代所有對(duì)象,增加內(nèi)存壓力,讓新生代年齡加1,當(dāng)老年代消亡時(shí),新生代也消亡了。
跨代引用假說:存在互相引用關(guān)系的兩個(gè)對(duì)象,是應(yīng)該傾向于同時(shí)生存或者同時(shí)消亡的。
????????依據(jù)這條假說,我們就不應(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ì)存在跨代引用 。此后當(dāng)發(fā)生Minor GC 時(shí),只有 包含了跨代引用的小塊內(nèi)存里的對(duì)象才會(huì)被加入到GC Roots進(jìn)行掃描 。雖然這種方法需要在對(duì)象改變引用關(guān)系(如將自己或者某個(gè)屬性賦值)時(shí)維護(hù)記錄數(shù)據(jù)的正確性,會(huì)增加一些運(yùn)行時(shí)的開銷,但比起收集時(shí)掃描整個(gè)老年代來說仍然是劃算的。

2、部分收集和整堆收集

部分收集(Partial GC):指目標(biāo)不是完整收集整個(gè)Java堆的垃圾收集
  1. 新生代收集(Minor GC/Young GC):指目標(biāo)只是新生代的垃圾收集。
  2. 老年代收集(Major GC/Old GC):指目標(biāo)只是老年代的垃圾收集。目前只有CMS收集器會(huì)有單獨(dú)收集老年代的行為。
  3. 混合收集(Mixed GC):指目標(biāo)是收集整個(gè)新生代以及部分老年代的垃圾收集。目前只有G1收集器會(huì)有這種行為。

整堆收集(Full GC):收集整個(gè)Java堆和方法區(qū)的垃圾收集。

二、垃圾回收算法

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

分為標(biāo)記和清除兩個(gè)階段。后續(xù)大部分算法也是以它為基礎(chǔ)。

標(biāo)記所有需要回收的對(duì)象,然后統(tǒng)一回收。

反過來也可以。

標(biāo)記所有存活的對(duì)象,回收沒有標(biāo)記的。

缺點(diǎn):

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

2.內(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)作。
JVM——分代收集理論和垃圾回收算法,jvm,java,算法

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

將可用內(nèi)存按容量劃分為大小相等的兩塊,每次只使用其中的一塊。當(dāng)這一塊的內(nèi)存用完了,就將還存活著的對(duì)象復(fù)制到另外一塊上面,然后再把已使用過的內(nèi)存空間一次清理掉。

優(yōu)點(diǎn):解決碎片化問題,實(shí)現(xiàn)簡(jiǎn)單,運(yùn)行高效。

缺點(diǎn):可用內(nèi)存縮小為原來的一半。

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

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

針對(duì)老年代,其中的標(biāo)記過程仍然與“標(biāo)記-清除”算法一樣,但后續(xù)步驟不是直接對(duì)可回收對(duì)象進(jìn)行清理,而是讓所有存活的對(duì)象都向內(nèi)存空間一端移動(dòng),然后直接清理掉邊界以外的內(nèi)存。

優(yōu)點(diǎn):1.移動(dòng)完會(huì)使內(nèi)存更加規(guī)整

? ? ? ? ? 2.如果老年代多,基本上都不移動(dòng)

缺點(diǎn):1.如果不應(yīng)用于老年代,需要移動(dòng)的對(duì)象過多就會(huì)消耗大量資源

? ? ? ? ? 2.移動(dòng)時(shí)必須暫停所有程序

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

?文章來源地址http://www.zghlxwxcb.cn/news/detail-658440.html

到了這里,關(guān)于JVM——分代收集理論和垃圾回收算法的文章就介紹完了。如果您還想了解更多內(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日
    瀏覽(63)
  • 分代收集 + 垃圾回收算法

    分代收集 + 垃圾回收算法

    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(簡(jiǎn)稱G1)收集器是垃圾收集器技術(shù)發(fā)展史上里程碑式的成果,它摒棄了傳統(tǒng)垃圾收集器的嚴(yán)格的內(nèi)存劃分,而是采

    2024年02月05日
    瀏覽(26)
  • JVM理論(六)執(zhí)行引擎--垃圾回收

    JVM理論(六)執(zhí)行引擎--垃圾回收

    垃圾: 指的是在運(yùn)行程序中沒有任何指針指向的對(duì)象 垃圾回收目的: 為了及時(shí)清理空間使得程序可以正常運(yùn)行 垃圾回收機(jī)制: JVM采取的是自動(dòng)內(nèi)存管理,即JVM負(fù)責(zé)對(duì)象的創(chuàng)建以及回收,將程序員從繁重的內(nèi)存管理釋放出來,更加專注業(yè)務(wù)的開發(fā) 垃圾回收區(qū)域: 頻繁收集Young區(qū)(新生

    2024年02月15日
    瀏覽(21)
  • 【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日
    瀏覽(25)
  • 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, 簡(jiǎn)稱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日
    瀏覽(26)
  • 【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日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包