我通過https://plumbr.eu/handbook/garbage-collection-algorithms-implementations/concurrent-mark-and-sweep鏈接解釋了CMS GC,但無法理解Concurrent Abortable Preclean正在做什麼,如果有人詳細解釋它會有所幫助。有人可以解釋CMS垃圾收集的「併發中止預清除」階段發生了什麼?
2
A
回答
0
的博客文章Understanding CMS GC Logs提到的(非可中止)預清洗階段的目的:
預清潔也是一個同步階段。在這個階段,我們看看CMS堆中的對象,這些對象通過年輕一代或新分配的升級進行更新,或者在我們在前一個併發標記階段進行併發標記時由增變器更新。通過同時重新掃描這些對象,預清理階段有助於減少下一站世界「備註」階段的工作。
因此,這個階段是一個優化。
將終止執行預洗,然後描述爲
「後併發預洗」如果伊甸園佔有率高於CMSScheduleRemarkEdenSizeThreshold,我們開始「同時終止執行預洗」,並繼續precleanig,直到我們有在伊甸園CMSScheduleRemarkEdenPenetration百分比佔用,否則我們立即安排'備註'階段。
另一篇文章The Unspoken - CMS and PrintGCDetails進一步提到:
這句話階段計劃,以便它不會發生背到背部採用了ParNew以免顯得暫停是總和ParNew和評論暫停。第二個預清理階段開始,並在備註階段準備開始時中止。中止這個第二個預清理階段是預期的行爲。它被中止不是一個錯誤的跡象。由於評論階段正在等待,爲什麼不進行預清理,但爲了預清理而不拖延評論。
換句話說,可中止預清理是一種優化(預清理優化),以便在年輕集合之間留出標記停頓並以有用的方式花費該等待時間。
相關問題
- 1. 有人可以解釋這段代碼發生了什麼?
- 2. 垃圾收集器:CMS中止預清潔問題?
- 3. 有人可以解釋這個codesnippet中發生了什麼嗎?
- 4. 有人可以解釋代碼中發生了什麼?
- 5. -verbose垃圾收集解釋
- 6. 有人可以解釋這裏發生了什麼嗎?
- 7. 有人可以解釋這裏發生了什麼嗎?
- 8. 什麼觸發垃圾收集
- 9. 什麼觸發java垃圾收集器
- 10. 有人可以解釋這段代碼中發生了什麼嗎?
- 11. 有人可以解釋在這段代碼中發生了什麼嗎? (數組)
- 12. 瞭解Actionscript垃圾收集
- 13. 除了垃圾收集之外,還有什麼可以在C++中使用「new_handler」?
- 14. 垃圾收集何時發生?
- 15. 併發垃圾收集的好處是什麼?
- 16. 這個lambda發生了什麼?可能有人解釋
- 17. 如何關閉併發垃圾收集?
- 18. 有人可以向我解釋在給定的代碼中發生了什麼?
- 19. 當Scala「Future」被垃圾收集時會發生什麼?
- 20. 什麼是'大多數併發垃圾收集器'?
- 21. 在併發系統中執行垃圾收集的可能方法是什麼?
- 22. 清除垃圾收集BST的最佳方法是什麼?
- 23. 有人可以向我解釋這個shell腳本中發生了什麼嗎?
- 24. 有人可以請解釋這個JavaScript代碼中發生了什麼?
- 25. 垃圾收集:需要更多解釋
- 26. PHP垃圾收集澄清
- 27. java垃圾收集是否安全地清除垃圾數據?
- 28. 有人可以解釋我在這裏發生了什麼使用malloc指針
- 29. 有人可以簡單地向我解釋一下IntStream發生了什麼?
- 30. 有人可以向我解釋這個嵌套循環內發生了什麼?