為什麼GC(垃圾回收)必須stop-the-world?
併發程式設計的許多困難都源於物件生存期問題,當物件線上程之間傳遞時,要確保它們安全地釋放就變得很麻煩。因此GC可以使得併發程式設計變得容易。但是GC也是一個挑戰,但是一次實現,就可以解決人們手動管理記憶體的麻煩(C語言),大大提高的開發效率和避免了許多Bug。
但是GC也是有成本的,他會影響程式的效率,GC是一個非常挑戰的工作,很多電腦科學家在上面耗費了數十年不斷的提升效率。
GC演算法設計時,會考慮幾個重要指標:
(1) 程式吞吐量:GC對程式效率的影響,也就花費在GC的時間和程式處理正常業務的時間比;
(2) GC吞吐量:單位時間內垃圾回收的數量;
(3) 暫停時間:Stop-the-world 的時間;
(4) 併發:垃圾回收機制如何使用多核;
等等還有很多
很多人問為什麼GC的時候要暫停(stop-the-world)整個程式,為什麼不能併發的執行GC呢?GC本質上是一種權衡,Stop-the-world 是為了GC吞吐量(在給定CPU時間內多少垃圾可以被收集器清除?),便不是說GC必須STW,你也可以選擇降低執行速度但是可以併發執行的收集演算法,這取決於你的業務。
比如:你做金融交易類的專案,分秒必爭,那可以選擇並行的方式。如果你是一種後臺任務,比如資料處理,那你可以選擇STW型別演算法,使 GC 的吞吐量得到最高。
兩類演算法最終的權衡指標就GC效率:程式工作時間與執行收集時間的比率。
沒有單一的演算法在所有方面都完美,語言也不可能知道程式的業務型別,這也就是“GC調優”存在的原因。這也是科學的基礎規律。
相關文章
- 什麼是垃圾蒐集(GC)?為什麼要有GC呢?GC
- Unity GC垃圾回收UnityGC
- GC垃圾回收器GC
- 十種GC垃圾回收器GC
- JVM必備基礎知識(三)-- GC垃圾回收機制JVMGC
- 託管堆和垃圾回收(GC)GC
- .Net平臺的GC垃圾回收GC
- 聊聊JVM的垃圾回收機制GCJVMGC
- 秋招乾貨 - JVM 垃圾回收(GC)JVMGC
- GC 分代回收 - 垃圾收集器GC
- [Inside HotSpot] Serial垃圾回收器Full GCIDEHotSpotGC
- GC是什麼?為什麼要有GC?GC
- JVM學習(二)——GC垃圾回收機制JVMGC
- [Inside HotSpot] Serial垃圾回收器 (二) Minor GCIDEHotSpotGC
- JDK 18 GC垃圾回收機制比較JDKGC
- 【JVM第八篇--垃圾回收】GC和GC演算法JVMGC演算法
- [轉帖]由淺入深瞭解GC入門篇(一):什麼是垃圾回收?GC
- 為什麼必須使用三次握手?
- JVM垃圾回收——新生代,老年代,永久代,Minor GC,Full GCJVMGC
- java學習筆記-4 JVM垃圾回收(GC)Java筆記JVMGC
- 你必須瞭解的java記憶體管理機制(四)-垃圾回收Java記憶體
- 為什麼重寫equals必須重寫hashCode
- 為什麼必須防止供應鏈攻擊?
- 【Android面試-Java-V05】Java GC 垃圾回收Android面試JavaGC
- javascript的垃圾回收機制指的是什麼?JavaScript
- javascript的垃圾回收機制指的是什麼JavaScript
- 測試人員為什麼必須要會 LinuxLinux
- 垃圾回收演算法|GC標記-清除演算法演算法GC
- 垃圾回收(三)【垃圾回收通知】
- PHP中什麼是垃圾回收?對效能有什麼影響PHP
- 為什麼採購和財務必須良好協作?
- 為什麼Java的main方法必須是public static void?JavaAI
- 款項為什麼必須走財務審批流程
- 女人為什麼必須學習會家庭財富管理?
- 深入理解Java的垃圾回收機制(GC)實現原理JavaGC
- 必知必會JVM垃圾回收——物件搜尋演算法與回收演算法JVM物件演算法
- 為什麼說 Java 程式設計師必須掌握 Spring Boot ?Java程式設計師Spring Boot
- 降本增效——券商們為什麼必須佈局小程式?