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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JVM垃圾回收器(Hotspot)

發布時間:2024/3/26 编程问答 91 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JVM垃圾回收器(Hotspot) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

JVM垃圾回收器發展與對比

一,GC回收算法:

1,引用計數法

對象中使用計數器。此算法無法解決互相引用的場景。

2,可達性分析算法

從gcRoots集合出發,查找引用鏈,如沒有鏈路鏈接的對象,則初次判斷為垃圾。
gcRoots集合一般包括兩類:全局的引用(如常量)、執行上下文(棧幀中本地變量表)。

具體細節:

2.1根節點枚舉階段
不會把所有執行上下文和全局的引用位置全部查出來,而是使用準確式垃圾收集,是使用一組稱為OopMap的數據結構,一旦類加載動作完成的時候,會把引用直接記錄在map集合中。收集器在掃描時可以直接得知map中信息了,并不需要真正一個不漏地從方法區等GC Roots開始查找。
2.2第一次判斷
gcRoots的鏈路中沒有鏈接的對象,第一次標記為垃圾。
2.3篩選
件是此對象是否有必要執行finalize()方法。假如對象沒有覆蓋finalize()方法,或者finalize()方法已經被虛擬機調用過,那么虛擬機將這兩種情況都視為“沒有必要執行”。
2.4第二次標記
如果為有必要執行:將這些第一次標記的垃圾對象放置在一個名為F-Queue的隊列中,由一條由虛擬機自動建立的、低調度優先級的線程執行它們的finalize()方法。
收集器將對F-Queue中的對象進行第二次小規模的標記,如果此對象重新與引用鏈上的任何一個對象建立關聯,則會被移出“即將回收”的集合。
2.5執行
finalize();

經典垃圾回收器比較

衡量垃圾收集器的三項最重要的指標是:內存占用(Footprint)、吞吐量(Throughput)和延遲(Latency),三者共同構成了一個“不可能三角”。三者總體的表現會隨技術進步而越來越好,但是 要在這三個方面同時具有卓越表現的“完美”收集器是極其困難甚至是不可能的,一款優秀的收集器通 常最多可以同時達成其中的兩項。

Hotspot垃圾回收器

1.Serial收集器

特點,一條收集線程去完成垃圾收集工作,但是必須暫停其他所有工作線程,直到它收集結束??赡軙褂脩艟€程停止響應。

優點:所有收集器里額外內存消耗最少(沒有線程交互的開銷,專心做垃圾收集自然可以 獲得最高的單線程收集效率)

缺點:暫停其他所有線程

1.1.Serial Old收集器

Serial收集器的老年代版本,同樣是一個單線程收集器,標記-整理算法。

2.ParNew收集器

Serial收集器多線程版本,除了Serial收集器外,目前只有它能與CMS 收集器配合工作

優點:處理器核心數量的增加,ParNew對于垃圾收集時 系統資源更高效

3.Parallel Scavenge收集器(吞吐量優先收集器)

Parallel Scavenge收集器的目標是達到一個可控制的吞吐 量(Throughput)。所謂吞吐量就是處理器用于運行用戶代碼的時間與處理器總消耗時間的比值。

兩個參數用于精確控制吞吐量,分別是控制最大垃圾收集停頓時間 的-XX:MaxGCPauseMillis參數以及直接設置吞吐量大小的-XX:GCTimeRatio參數。

3.1Parallel Old收集器

Parallel Scavenge收集器的老年代版本,支持多線程并發收集,基于標記-整理算法實現。在注重 吞吐量或者處理器資源較為稀缺的場合,都可以優先考慮Parallel Scavenge加Parallel Old收集器這個組合。

4.CMS(劃時代意義)

第一款真正意義上支持并發的垃圾收集器,它首次實現了讓垃圾收集線程與用戶線程(基本上)同時工作。關注點是以獲取最短回收停頓時間為目標的收集器。

過程分為四個步驟,包括:

1)初始標記(CMS initial mark)

? 只是標記一下GC Roots能直接關聯到的對象,速度很快。

2)并發標記(CM S concurrent mark)

? 從GC Roots的直接關聯對象開始遍歷整個對 象圖的過程,這個過程耗時較長但是不需要停頓用戶線程,可以與垃圾收集線程一起并發運行。

3)重新標記(CM S remark)

? 為了修正并發標記期間,因用戶程序繼續運作而導致標記產生變動的那一部分對象的 標記記錄。

4)并發清除(CM S concurrent sweep)

? 清理刪除掉標記階段判斷的已經死亡的 對象,由于不需要移動存活對象,所以這個階段也是可以與用戶線程同時并發的。

優點:并發收集、低停頓。

缺點:1,占用了一部分線程(或者說處理器的計 算能力)而導致應用程序變慢,降低總吞吐量

? 2,CMS收集器無法處理“浮動垃圾”(FloatingGarbage),有可能出現“Con-current Mode Failure”失敗進而導致另一次完全“Stop The World”的Full GC的產生。

? 3,空間碎片產生。無法找 到足夠大的連續空間來分配當前對象,而不得不提前觸發一次Full GC。

?

5.G1(里程碑)

面向全堆的收集器,不 再需要其他新生代收集器的配合工作。目標是在延遲可控的情況下獲得盡可能高的吞吐量。

G1收集器出現之前的所有 其他收集器,包括CMS在內,垃圾收集的目標范圍要么是整個新生代(Minor GC),要么就是整個老 年代(M ajor GC),再要么就是整個Java堆(Full GC)。而G1跳出了這個樊籠,它可以面向堆內存任 何部分來組成回收集(Collection Set,一般簡稱CSet)進行回收,衡量標準不再是它屬于哪個分代,而 是哪塊內存中存放的垃圾數量最多,回收收益最大,這就是G1收集器的Mixed GC模式。

Java堆劃分為多個大小相等的獨立區域(Region),是一系列區 域(不需要連續)的動態集合,每一個Region都可以根據需要,扮演新生代的Eden空間、Survivor空間,或者老年代空間。收集器能夠對扮演不同角色的 Region采用不同的策略去處理,這樣無論是新創建的對象還是已經存活了一段時間、熬過多次收集的 舊對象都能獲取很好的收集效果。

G1收集器去跟蹤各個Region里面的垃 圾堆積的“價值”大小,價值即回收所獲得的空間大小以及回收所需時間的經驗值,然后在后臺維護一 個優先級列表,每次根據用戶設定允許的收集停頓時間(使用參數-XX:M axGCPauseM illis指定,默 認值是200毫秒),優先處理回收價值收益最大的那些Region,這也就是“Garbage First”名字的由來。 這種使用Region劃分內存空間,以及具有優先級的區域回收方式,保證了G1收集器在有限的時間內獲 取盡可能高的收集效率。

過程:

初始標記(Initial M arking)

? 僅僅只是標記一下GC Roots能直接關聯到的對象,并且修改TAM S 指針的值,讓下一階段用戶線程并發運行時,能正確地在可用的Region中分配新對象。這個階段需要 停頓線程,但耗時很短,而且是借用進行Minor GC的時候同步完成的,所以G1收集器在這個階段實際 并沒有額外的停頓。

并發標記(Concurrent Marking)

? 從GC Root開始對堆中對象進行可達性分析,遞歸掃描整個堆 里的對象圖,找出要回收的對象,這階段耗時較長,但可與用戶程序并發執行。當對象圖掃描完成以 后,還要重新處理SAT B記錄下的在并發時有引用變動的對象。

最終標記(Final M arking)

? 對用戶線程做另一個短暫的暫停,用于處理并發階段結束后仍遺留 下來的最后那少量的SAT B記錄。

篩選回收(Live Data Counting and Evacuation)

? 負責更新Region的統計數據,對各個Region的回 收價值和成本進行排序,根據用戶所期望的停頓時間來制定回收計劃,可以自由選擇任意多個Region 構成回收集,然后把決定回收的那一部分Region的存活對象復制到空的Region中,再清理掉整個舊 Region的全部空間。這里的操作涉及存活對象的移動,是必須暫停用戶線程,由多條收集器線程并行 完成的。

低延遲垃圾收集器

Shenandoah

Shenandoah的目標是實現一種能在任何堆內存大小下都可以把垃圾收集的停頓時間限制在十毫秒以內的垃圾收集器,該目標意味著相比CMS和G1,Shenandoah不僅要進行并發的垃圾標記,還要并發地進行對象清理后的整理動作。
Shenandoah反而更像是G1的繼承者,它們兩者有著相似的堆內存布局,在初始標記、并發標記等許多階段的處理思路上都高度一致。
G1的回收階段是可以多線程并行的,但卻不能與用戶線程并發。Shenandoah通過轉發指針來解決這個問題。

Shenandoah三個最重要的并發階段(并發標記、并發回收、并發引用更新)。

未完待續。。

ZGC

總結

以上是生活随笔為你收集整理的JVM垃圾回收器(Hotspot)的全部內容,希望文章能夠幫你解決所遇到的問題。

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