fbpx

垃圾收集器的必備基礎

Contents

這門課程教你關於自動記憶體管理的技術

從這 2 小時的課程,你會學到

  • 電腦程式自動記憶體管理背後的演算法和資料結構
  • 記憶體管理歷史: 靜態,堆疊,Heap allocations
  • 虛擬記憶體和記憶體佈局
  • 追蹤與直接收集器的比較
  • 語義( Semantic )與語法( Syntactic )垃圾的比較
  • Mark-Sweep 收集器
  • Mark-Compact 收集器
  • 參考計數收集器
  • 複製收集器
  • Generational 收集器
  • 平行的、增量的、併發( Concurrent )的收集器
  • 三色抽象化( Tri-color abstraction )與標記
  • 垃圾收集器的障礙

要求

  • 基本的資料結構和演算法(樹、圖、連結串列等)
  • 關於電腦記憶體的基本知識(位元組、位址、指標)

課程說明

垃圾收集器的必備基礎

記憶體洩漏( Memory leaks ) 和迷途指標( dangling pointers )是手動記憶體管理的主要問題。 你在連結串列中刪除了父節點,卻忘了先刪除它的所有子節點ーー你的記憶體正在洩漏。 你以正確的順序刪除一個物件鏈ー但是突然你的程式崩潰了,因此你忘記了這個資源的第二個所有者,這個資源現在試圖取消參考( dereference ) 一個空指標( null-pointer )。

為了避免這些問題,大多數現代高階程式語言實現了自動記憶體管理。 你可以手動分配物件的記憶體,但是不必擔心它們的釋放: 一個特殊的程式,垃圾收集器,知道如何正確地自動釋放物件,並回收它們以供將來重複使用。

在“垃圾收集器必備基礎”課程中,我們學習了與自動記憶體管理相關的所有不同的技術和演算法,這些技術和演算法現在已經在實踐中得到了應用。

這門課是給誰上的?

首先,針對編譯器工程師

在實現程式語言時,很有可能需要實現一個垃圾收集器。 即使最初定位為“記憶體安全”的語言,如 Rust,最終也實現了自動參考計數(ARC)和其它收集器。

重申一下: 在大多數現代高階程式語言中,垃圾收集器模組(或多個 GC 模組,比如 Java)現在基本上是必需的。

如果實現程式語言不是我每天的工作?

如果你不是一個編譯器工程師,那麼這個課程對你來說仍然是有趣的。 總的來說,實現垃圾收集器或記憶體管理器是一項相當高階的工程任務。 這是一個簡單的技巧: 你參與一些複雜的專案(如垃圾收集器、編譯器、直譯器等) ,在構建它時,你將學習所有不同的資料結構和演算法。 然後回到“每日程式設計” ,得到能力上的提升以成為一個更好的工程師,掌握了複雜系統的可轉移通用知識。

這個專案我需要熟悉 C 還是 C++ ?

也不盡然! 當然,C 和 C++ 可能是最適合原始記憶體操作的語言,並且在這裡非常適合,但是在課程中我們學習通用設計演算法,主要關注垃圾收集器和記憶體分配器的理論方面。 這意味著你可以用任何你想要的語言來實現它們。 例如,你可以在 JavaScript 中為一個虛擬 Heap 分配一個 ArrayBuffer,或者類似的在 Python、 Rust 等中分配一個 bytearray。

本課程中的大多數演算法都是用泛型虛擬碼( generic pseudo-code )描述的,因此你可以將它們移植到任何語言中。

這門課的具體內容是什麼?

這些講座的主要內容是:

  • 簡明扼要,直奔主題。 每個講座是自給自足的,簡潔,並描述資訊直接相關的主題,沒有不相關的材料或談話分散注意力。
  • 動畫簡報結合現場編輯筆記。 這使得理解主題更加容易,並顯示如何(以及何時)連結物件結構。 靜態的幻燈片根本不適用於複雜的內容。

閱讀材料

作為本課程的進一步閱讀和補充文獻,推薦以下書籍:

The Garbage Collection Handbook: The Art of Automatic Memory Management (Chapman & Hall/CRC Applied Algorithms and Data Structures series)

The Compiler Design Handbook: Optimizations and Machine Code Generation, Second Edition

目標受眾

  • 編譯器工程師
  • 所有好奇的工程師,願意實現一個複雜的專案來學習不同的記憶體管理演算法(通用知識可以轉移到其他系統)

講師簡介

Dmitry Soshnikov 軟體工程師和講師 ( 更多講師線上課程介紹 )

Dmitry Soshnikov 是一名軟體工程師,也是一名有不同於電腦科學主題的講師。

他對教育充滿熱情,注重高品質的教育內容: 簡明扼要,並使用現場編輯筆記的動畫講座。

你會從 Dimitry 的課程學到:

  • 編譯器和直譯器: 建立一個程式語言
  • 垃圾收集器(自動記憶體管理)
  • 程式設計語言理論
  • Automata Theory: Building a RegExp machine
  • 自動機理論: 建立一個 RegExp 機器
  • 解析器理論: 實現一個編譯器編譯程式

英文字幕:有

  • 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To

報名參加課程

Sponsored by Udemy


也許你會有興趣


追蹤 Soft & Share

幫我們個小忙!

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Powered by WordPress.com.

Up ↑

%d 位部落客按了讚: