iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 11
0
自我挑戰組

30 Days 如何把 C 語言偽裝成高階語言 OWO /系列 第 11

Days 11: 什麼是垃圾回收器?

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


以下為維基百科中 垃圾回收 (計算機科學) 條目的定義:

垃圾回收(英語: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

沒有詳細看,有空再看。


▌參考資料:

垃圾回收 (電腦科學) - 維基百科,自由的百科全書
https://zh.wikipedia.org/zh-hk/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8)
貝姆垃圾收集器 - 維基百科,自由的百科全書
https://zh.wikipedia.org/zh-hk/%E8%B2%9D%E5%A7%86%E5%9E%83%E5%9C%BE%E6%94%B6%E9%9B%86%E5%99%A8


上一篇
Days 10: atexit()、函數程序結束時調用函數
下一篇
Days 12: 垃圾回收器系列:概念、粗略實現
系列文
30 Days 如何把 C 語言偽裝成高階語言 OWO /31

尚未有邦友留言

立即登入留言