日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

详解垃圾回收算法

發(fā)布時(shí)間:2025/3/11 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 详解垃圾回收算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

分享一波:程序員賺外快-必看的巔峰干貨

標(biāo)記清除算法

概念
該算法有兩個(gè)階段。

  • 標(biāo)記階段:找到所有可訪問的對(duì)象,做個(gè)標(biāo)記。

  • 清除階段:遍歷堆,把未被標(biāo)記的對(duì)象回收

  • 缺點(diǎn):會(huì)產(chǎn)生碎片,不夠連貫
    應(yīng)用場(chǎng)景

    該算法一般應(yīng)用于老年代,因?yàn)槔夏甏膶?duì)象生命周期比較長(zhǎng)。
    優(yōu)缺點(diǎn)

    標(biāo)記清除算法的優(yōu)點(diǎn)和缺點(diǎn)

  • 優(yōu)點(diǎn)
    • 是可以解決循環(huán)引用的問題

    • 必要時(shí)才回收(內(nèi)存不足時(shí))

  • 缺點(diǎn):
    • 回收時(shí),應(yīng)用需要掛起,也就是stop the world。

    • 標(biāo)記和清除的效率不高,尤其是要掃描的對(duì)象比較多的時(shí)候

    • 會(huì)造成內(nèi)存碎片(會(huì)導(dǎo)致明明有內(nèi)存空間,但是由于不連續(xù),申請(qǐng)稍微大一些的對(duì)象無(wú)法做到)

    復(fù)制算法

    概念

    如果jvm使用了coping算法,一開始就會(huì)將可用內(nèi)存分為兩塊,from域和to域, 每次只是使用from域,to域則空閑著。當(dāng)from域內(nèi)存不夠了,開始執(zhí)行GC操作,這個(gè)時(shí)候,會(huì)把from域存活的對(duì)象拷貝到to域,然后直接把from域進(jìn)行內(nèi)存清理。
    應(yīng)用場(chǎng)景

    coping算法一般是使用在新生代中,因?yàn)樾律械膶?duì)象一般都是朝生夕死的,存活對(duì)象的數(shù)量并不多,這樣使用coping算法進(jìn)行拷貝時(shí)效率比較高。jvm將Heap 內(nèi)存劃分為新生代與老年代,又將新生代劃分為Eden(伊甸園) 與2塊Survivor Space(幸存者區(qū)) ,然后在Eden –>Survivor Space 以及From Survivor Space 與To Survivor Space 之間實(shí)行Copying 算法。 不過jvm在應(yīng)用coping算法時(shí),并不是把內(nèi)存按照1:1來(lái)劃分的,這樣太浪費(fèi)內(nèi)存空間了。一般的jvm都是8:1。也即是說(shuō),Eden區(qū):From區(qū):To區(qū)域的比例是

    始終有90%的空間是可以用來(lái)創(chuàng)建對(duì)象的,而剩下的10%用來(lái)存放回收后存活的對(duì)象。

    1、當(dāng)Eden區(qū)滿的時(shí)候,會(huì)觸發(fā)第一次young gc,把還活著的對(duì)象拷貝到Survivor From區(qū);當(dāng)Eden區(qū)再次觸發(fā)young gc的時(shí)候,會(huì)掃描Eden區(qū)和From區(qū)域,對(duì)兩個(gè)區(qū)域進(jìn)行垃圾回收,經(jīng)過這次回收后還存活的對(duì)象,則直接復(fù)制到To區(qū)域,并將Eden和From區(qū)域清空。

    2、當(dāng)后續(xù)Eden又發(fā)生young gc的時(shí)候,會(huì)對(duì)Eden和To區(qū)域進(jìn)行垃圾回收,存活的對(duì)象復(fù)制到From區(qū)域,并將Eden和To區(qū)域清空。

    3、可見部分對(duì)象會(huì)在From和To區(qū)域中復(fù)制來(lái)復(fù)制去,如此交換15次(由JVM參數(shù)MaxTenuringThreshold決定,這個(gè)參數(shù)默認(rèn)是15),最終如果還是存活,就存入到老年代

    注意: 萬(wàn)一存活對(duì)象數(shù)量比較多,那么To域的內(nèi)存可能不夠存放,這個(gè)時(shí)候會(huì)借助老年代的空間。
    優(yōu)缺點(diǎn)

    優(yōu)點(diǎn):在存活對(duì)象不多的情況下,性能高,能解決內(nèi)存碎片和java垃圾回收算法之-標(biāo)記清除 中導(dǎo)致的引用更新問題。

    缺點(diǎn): 會(huì)造成一部分的內(nèi)存浪費(fèi)。不過可以根據(jù)實(shí)際情況,將內(nèi)存塊大小比例適當(dāng)調(diào)整;如果存活對(duì)象的數(shù)量比較大,coping的性能會(huì)變得很差。

    標(biāo)記壓縮算法

    標(biāo)記清除算法和標(biāo)記壓縮算法非常相同,但是標(biāo)記壓縮算法在標(biāo)記清除算法之上解決內(nèi)存碎片化
    概念

    壓縮算法簡(jiǎn)單介紹

    任意順序 : 即不考慮原先對(duì)象的排列順序,也不考慮對(duì)象之間的引用關(guān)系,隨意移動(dòng)對(duì)象;

    線性順序 : 考慮對(duì)象的引用關(guān)系,例如a對(duì)象引用了b對(duì)象,則盡可能將a和b移動(dòng)到一塊;

    滑動(dòng)順序 : 按照對(duì)象原來(lái)在堆中的順序滑動(dòng)到堆的一端。
    優(yōu)缺點(diǎn)

    優(yōu)點(diǎn):解決內(nèi)存碎片問題,缺點(diǎn)壓縮階段,由于移動(dòng)了可用對(duì)象,需要去更新引用。

    分代算法

    概述

    這種算法,根據(jù)對(duì)象的存活周期的不同將內(nèi)存劃分成幾塊,新生代和老年代,這樣就可以根據(jù)各個(gè)年代的特點(diǎn)采用最適當(dāng)?shù)氖占惴ā?梢杂米ブ攸c(diǎn)的思路來(lái)理解這個(gè)算法。

    新生代對(duì)象朝生夕死,對(duì)象數(shù)量多,只要重點(diǎn)掃描這個(gè)區(qū)域,那么就可以大大提高垃圾收集的效率。另外老年代對(duì)象存儲(chǔ)久,無(wú)需經(jīng)常掃描老年代,避免掃描導(dǎo)致的開銷。
    新生代

    在新生代,每次垃圾收集器都發(fā)現(xiàn)有大批對(duì)象死去,只有少量存活,采用復(fù)制算法,只需要付出少量存活對(duì)象的復(fù)制成本就可以完成收集;可以參看我之前寫的java垃圾回收算法之-coping復(fù)制
    老年代

    而老年代中因?yàn)閷?duì)象存活率高、沒有額外空間對(duì)它進(jìn)行分配擔(dān)保,就必須“標(biāo)記-清除-壓縮”算法進(jìn)行回收。參看java垃圾回收算法之-標(biāo)記_清除壓縮

    新創(chuàng)建的對(duì)象被分配在新生代,如果對(duì)象經(jīng)過幾次回收后仍然存活,那么就把這個(gè)對(duì)象劃分到老年代。

    老年代區(qū)存放Young區(qū)Survivor滿后觸發(fā)minor GC后仍然存活的對(duì)象,當(dāng)Eden區(qū)滿后會(huì)將存活的對(duì)象放入Survivor區(qū)域,如果Survivor區(qū)存不下這些對(duì)象,GC收集器就會(huì)將這些對(duì)象直接存放到Old區(qū)中,如果Survivor區(qū)中的對(duì)象足夠老,也直接存放到Old區(qū)中。如果Old區(qū)滿了,將會(huì)觸發(fā)Full GC回收整個(gè)堆內(nèi)存。

    *************************************優(yōu)雅的分割線 **********************************

    分享一波:程序員賺外快-必看的巔峰干貨

    如果以上內(nèi)容對(duì)你覺得有用,并想獲取更多的賺錢方式和免費(fèi)的技術(shù)教程

    請(qǐng)關(guān)注微信公眾號(hào):HB荷包

    一個(gè)能讓你學(xué)習(xí)技術(shù)和賺錢方法的公眾號(hào),持續(xù)更新

    總結(jié)

    以上是生活随笔為你收集整理的详解垃圾回收算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。