根搜尋算法解決了「哪些物件可回收」的問題,但實際回收仍需 GC 執行緒與應用執行緒協作。標記-清除演算法應運而生:當堆可用記憶體耗盡,觸發 Stop-the-World,執行「標記」與「清除」兩階段。



清除後,存活物件標記位歸零,程式恢復運行。
若 GC 與應用並發,可能出現「漏標」導致新建物件被誤回收。例如:物件 A 已標記完成,此時應用建立 B 並讓 A 引用 B,B 錯過標記階段,清除時將被錯誤回收,導致程式邏輯錯誤。
標記-清除是 GC 歷史的起點,其缺點直接催生了複製與標記-整理兩大優化演算法。下一章將詳細拆解這兩種改良方案。
作者:zuoxiaolong(左潇龍)
出處:博客園左潇龍的技術博客