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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

GC算法的评价标准

發(fā)布時(shí)間:2024/8/23 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GC算法的评价标准 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GC是什么

GC就是垃圾回收, 哎, 現(xiàn)在Java如日中天, JVM都又算了解吧. 其中的垃圾回收還經(jīng)常在面試中問(wèn)道(雖然我忘完了). 當(dāng)然, 垃圾回收不只是JVM, Python、等等高級(jí)語(yǔ)言都用到了. 簡(jiǎn)單說(shuō), GC完成的任務(wù)就兩件事:

  • 找到內(nèi)存中已經(jīng)無(wú)用的垃圾
  • 將垃圾回收, 以便于之后可以再次利用
  • 之前用C語(yǔ)言的時(shí)候, 使用 malloc申請(qǐng)堆上的內(nèi)存, 是需要通過(guò)free函數(shù)進(jìn)行釋放的. 否則大量?jī)?nèi)存空間得不到釋放, 要出問(wèn)題的.

    而GC簡(jiǎn)單說(shuō)就是幫你做了釋放內(nèi)存空間的操作, 使用這只需要?jiǎng)?chuàng)建, 而不需要關(guān)心釋放.

    GC算法的評(píng)價(jià)標(biāo)準(zhǔn)

    GC有很多的算法來(lái)實(shí)現(xiàn), 如何來(lái)評(píng)價(jià)一個(gè)GC算法的優(yōu)劣呢? 總要有個(gè)判斷的依據(jù)的吧.

    1. 吞吐量

    總聽(tīng)過(guò)過(guò)網(wǎng)絡(luò)吞吐量吧, 就是每秒能夠接受多少字節(jié)的數(shù)據(jù). 換到GC上也差不多的道理, 就是每秒能處理多少字節(jié)的內(nèi)存.

    舉個(gè)例子:

    [外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-dbD1gcbR-1585471243814)(GC算法的評(píng)價(jià)標(biāo)準(zhǔn).assets/1585467465574.png)]

    上面是一個(gè)程序的執(zhí)行流程, 其中GC執(zhí)行了兩次, 總時(shí)間為(A+B). 假設(shè)對(duì)內(nèi)存大小為S, 則平均吞吐量為: S/(A+B). 如果時(shí)間單位是秒, 堆大小為kb, 則吞吐量單位為 kb/s. 也就是平均每秒能處理的字節(jié)數(shù). 可以將吞吐量理解為速度.

    顯而易見(jiàn), 吞吐量越大, 單位時(shí)間處理的內(nèi)存越多, GC執(zhí)行的時(shí)間就越短.

    2. 最大暫停時(shí)間

    因?yàn)槌绦蛟贑PU中是分片執(zhí)行的, 當(dāng)GC執(zhí)行的時(shí)候, 程序就需要暫停等待. 最大暫停時(shí)間值得就是: 執(zhí)行GC而暫停執(zhí)行程序的最長(zhǎng)時(shí)間.

    最大暫停時(shí)間越小, 程序的中斷時(shí)間越短.

    3.堆的使用效率

    使用了某GC算法后, 留給程序使用的堆大小占多大比例. 比如標(biāo)記-復(fù)制算法, 講堆一分為二, 每次只使用其中的一半, 另一半空閑著, 使用效率就只有50%, 造成了很大的浪費(fèi), 有點(diǎn)空間換時(shí)間的意思. 使用效率當(dāng)然是越大越好.

    4.訪問(wèn)的局部性

    電腦中, CPU寄存器從高速緩存中獲取數(shù)據(jù), 高速緩存是內(nèi)存的部分?jǐn)?shù)據(jù), 內(nèi)存再?gòu)挠脖P獲取數(shù)據(jù). 越往后速度越慢, 相應(yīng)的空間越大, 讀取數(shù)據(jù)時(shí), 如果能夠從最近的又最快的地方讀取, 速度就會(huì)快很多.

    應(yīng)用到GC中, 也是差不多的道理, 有些對(duì)象是需要經(jīng)常回收的, 而有些對(duì)象則會(huì)停留很長(zhǎng)一段時(shí)間, 每次回收時(shí)若能夠精準(zhǔn)定位到需要回收的對(duì)象, 則速度會(huì)提升很多.同時(shí), 將具有引用關(guān)系的相關(guān)對(duì)象放到內(nèi)存中的臨近位置, 訪問(wèn)時(shí)程序就無(wú)需多次讀取訪問(wèn)內(nèi)存.

    JVM中的分代思想就有點(diǎn)這個(gè)意思.


    也不能完全看這些標(biāo)準(zhǔn), 有的算法是這個(gè)高, 那個(gè)低. 還是要有所取舍的.

    總結(jié)

    以上是生活随笔為你收集整理的GC算法的评价标准的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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