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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

jvm gc,gc算法_GC解释:算法

發布時間:2023/12/3 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jvm gc,gc算法_GC解释:算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

jvm gc,gc算法

如前一篇文章中所述,HotSpot JVM中有四個可用的垃圾收集器。 它們之間有一些顯著差異,但是用于完成實際工作的算法背后的實際概念非常相似。 在這篇簡短的文章中,我將嘗試解釋三種基本算法:

  • 打標
  • 打標緊湊
  • 標記復制

GC根

在進入細節之前,請確保我們對什么是GC根有一個共識。 這些是可以從堆外部直接訪問的對象。 例如:

  • 活動線程
  • 靜態變量
  • 局部變量(可通過線程堆棧訪問)
  • JNI參考

標記

討論的所有算法都具有相同的標記階段。 標記階段是從GC根開始遍歷整個對象圖。 當GC訪問該對象時,它將其標記為可訪問并因此處于活動狀態。 從GC根無法訪問的所有對象都是垃圾。 標記需要暫停(STW)暫停,因為正在運行的應用程序線程可能會干擾。 STW暫停的時間長短主要取決于訪問對象的數量。

打標

在標記階段之后,我們擁有了已訪問(可通過GC根訪問)和未訪問對象占用的內存空間。 掃描階段將釋放包含無法訪問對象的內存片段。 這很簡單,但是由于死對象不一定彼此相鄰,因此最終導致內存碎片化。 這本身還不錯,但是嘗試將太大的對象放入內存中可能導致OutOfMemoryError 。

打標緊湊

該算法解決了內存碎片的問題。 標記所有活動對象后,它們將移到內存空間的開頭。 這有助于避免由于內存碎片過多而導致的OutOfMemoryError ,但是壓縮堆并不是免費的。 復制對象和更新對它們的所有引用都需要時間,并且所有操作都在STW暫停期間發生。

標記復制

標記復制算法將所有活動對象復制到新的內存區域。 先前占用的區域被認為是空閑的。 下次執行標記復制時,所有活動對象都移回到上一個存儲區。 您可以想象,這當然會導致內存壓縮。 不幸的是,它需要額外的額外區域,該區域必須足夠大以適合任何給定時間點的所有活動對象。

翻譯自: https://www.javacodegeeks.com/2017/09/gc-explained-algorithms.html

jvm gc,gc算法

總結

以上是生活随笔為你收集整理的jvm gc,gc算法_GC解释:算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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