▌垃圾回收器的基本概念:


垃圾回收(英語:Garbage Collection,縮寫為GC)在計算機科學中是一種自動的記憶體管理機制。當一個電腦上的動態記憶體不再需要時,就應該予以釋放,以讓出記憶體,這種記憶體資源管理,稱為垃圾回收。垃圾回收器可以讓程式員減輕許多負擔,也減少程式員犯錯的機會。垃圾回收最早起源於LISP語言。目前許多語言如Smalltalk、Java、C#和D語言都支援垃圾回收器。

Java, C# 等高階語言本身內建垃圾回收器
例如在 Java 中,可以調用 System.gc() 來建議 JVM 進行垃圾回收。

▌好處:

自動的垃圾回收可以讓程式員不需要考慮太多動態記憶體釋放、管理問題,
這樣可以減少了內存洩漏、詭異的錯誤導致系統崩潰等問題。

▌壞處:

相對手動釋放 ( malloc() + free() ),
垃圾回收器效率較低,需要額外的空間進行標記,
拖慢了程序的速度。

▌回收方法:

垃圾回收器 對垃圾的回收方法也有很多種,
根據維基百科,大約有以下分類:
收集器實現:
1.參照計數收集器
2.跟蹤收集器
回收演算法:
1.標記-清除
2.標記-壓縮
3.複製
4.增量回收器
5.分代

其實我對上述的理論做法並不熟悉...
但將會實現垃圾回收器的方法,超級像貝姆垃圾收集器
Boehm-Demers-Weiser garbage collector,也就是著名的Boehm GC,是計算機應用在C/C++語言上的一個保守的垃圾回收器,可應用於許多經由C/C++開發的專案,同時也適用於其它執行環境的各類程式語言。
以及採用類似**【標記-清除】**概念的方法。

▌召喚!GOOGLE 搜尋引擎技術:

查了一下還蠻多相關實現的。
云风的 BLOG: 给 C 实现一个垃圾收集器
https://blog.codingnow.com/2008/06/gc_for_c.html
自己动手写垃圾收集器[译] - 简书
https://www.jianshu.com/p/82c6337581db
垃圾回收算法与 JVM 垃圾回收器综述 - 知乎
https://zhuanlan.zhihu.com/p/28258571
GC 的实现原理 - 简书
https://www.jianshu.com/p/7305b10decf1
沒有詳細看,有空再看。

▌參考資料: