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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GC算法的评价标准

發布時間:2024/8/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GC算法的评价标准 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GC是什么

GC就是垃圾回收, 哎, 現在Java如日中天, JVM都又算了解吧. 其中的垃圾回收還經常在面試中問道(雖然我忘完了). 當然, 垃圾回收不只是JVM, Python、等等高級語言都用到了. 簡單說, GC完成的任務就兩件事:

  • 找到內存中已經無用的垃圾
  • 將垃圾回收, 以便于之后可以再次利用
  • 之前用C語言的時候, 使用 malloc申請堆上的內存, 是需要通過free函數進行釋放的. 否則大量內存空間得不到釋放, 要出問題的.

    而GC簡單說就是幫你做了釋放內存空間的操作, 使用這只需要創建, 而不需要關心釋放.

    GC算法的評價標準

    GC有很多的算法來實現, 如何來評價一個GC算法的優劣呢? 總要有個判斷的依據的吧.

    1. 吞吐量

    總聽過過網絡吞吐量吧, 就是每秒能夠接受多少字節的數據. 換到GC上也差不多的道理, 就是每秒能處理多少字節的內存.

    舉個例子:

    [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dbD1gcbR-1585471243814)(GC算法的評價標準.assets/1585467465574.png)]

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

    顯而易見, 吞吐量越大, 單位時間處理的內存越多, GC執行的時間就越短.

    2. 最大暫停時間

    因為程序在CPU中是分片執行的, 當GC執行的時候, 程序就需要暫停等待. 最大暫停時間值得就是: 執行GC而暫停執行程序的最長時間.

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

    3.堆的使用效率

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

    4.訪問的局部性

    電腦中, CPU寄存器從高速緩存中獲取數據, 高速緩存是內存的部分數據, 內存再從硬盤獲取數據. 越往后速度越慢, 相應的空間越大, 讀取數據時, 如果能夠從最近的又最快的地方讀取, 速度就會快很多.

    應用到GC中, 也是差不多的道理, 有些對象是需要經常回收的, 而有些對象則會停留很長一段時間, 每次回收時若能夠精準定位到需要回收的對象, 則速度會提升很多.同時, 將具有引用關系的相關對象放到內存中的臨近位置, 訪問時程序就無需多次讀取訪問內存.

    JVM中的分代思想就有點這個意思.


    也不能完全看這些標準, 有的算法是這個高, 那個低. 還是要有所取舍的.

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。