記憶體洩漏( Memory leaks ) 和迷途指標( dangling pointers )是手動記憶體管理的主要問題。 你在連結串列中刪除了父節點,卻忘了先刪除它的所有子節點ーー你的記憶體正在洩漏。 你以正確的順序刪除一個物件鏈ー但是突然你的程式崩潰了,因此你忘記了這個資源的第二個所有者,這個資源現在試圖取消參考( dereference ) 一個空指標( null-pointer )。
為了避免這些問題,大多數現代高階程式語言實現了自動記憶體管理。 你可以手動分配物件的記憶體,但是不必擔心它們的釋放: 一個特殊的程式,垃圾收集器,知道如何正確地自動釋放物件,並回收它們以供將來重複使用。
在“垃圾收集器必備基礎”課程中,我們學習了與自動記憶體管理相關的所有不同的技術和演算法,這些技術和演算法現在已經在實踐中得到了應用。
✅這門課是給誰上的?
首先,針對編譯器工程師。
在實現程式語言時,很有可能需要實現一個垃圾收集器。 即使最初定位為“記憶體安全”的語言,如 Rust,最終也實現了自動參考計數(ARC)和其它收集器。
重申一下: 在大多數現代高階程式語言中,垃圾收集器模組(或多個 GC 模組,比如 Java)現在基本上是必需的。
如果實現程式語言不是我每天的工作?
如果你不是一個編譯器工程師,那麼這個課程對你來說仍然是有趣的。 總的來說,實現垃圾收集器或記憶體管理器是一項相當高階的工程任務。 這是一個簡單的技巧: 你參與一些複雜的專案(如垃圾收集器、編譯器、直譯器等) ,在構建它時,你將學習所有不同的資料結構和演算法。 然後回到“每日程式設計” ,得到能力上的提升以成為一個更好的工程師,掌握了複雜系統的可轉移通用知識。
✅這個專案我需要熟悉 C 還是 C++ ?
也不盡然! 當然,C 和 C++ 可能是最適合原始記憶體操作的語言,並且在這裡非常適合,但是在課程中我們學習通用設計演算法,主要關注垃圾收集器和記憶體分配器的理論方面。 這意味著你可以用任何你想要的語言來實現它們。 例如,你可以在 JavaScript 中為一個虛擬 Heap 分配一個 ArrayBuffer,或者類似的在 Python、 Rust 等中分配一個 bytearray。
本課程中的大多數演算法都是用泛型虛擬碼( generic pseudo-code )描述的,因此你可以將它們移植到任何語言中。
https://softnshare.com/essentials-of-garbage-collectors/
「javascript 移 除 物件」的推薦目錄:
javascript 移 除 物件 在 紀老師程式教學網 Facebook 的最佳解答
兩大基礎語言 C 與 Java 入門書推薦!
最近很多朋友都表示對程式設計有興趣,但不知道怎麼入門。其實想知道入門途徑,得從您學程式想做什麼開始。一般而言,程式設計有下列這幾條途徑:
1. 寫「桌面應用程式」(如:Photoshop...等)。
2. 開發網站、或雲端程式
3. 開發手機 App
4. 自動控制(操縱機械手臂之類的)或韌體移植
5. 資料庫分析(如:最近很夯的「海量資料分析」(Big Data Analysis))
6. 遊戲程式設計
7. 系統工具設計(如:防毒軟體、資訊安全...)
不過不論您想走哪條道路,最佳的起點只有兩個:「C 語言」與「Java 語言」。「C 語言」學會後,可以往「iPhone/iPad 手機 App 開發」(它們用的 Objective-C 包含 C 語言所有功能)、「自動控制或韌體移植」、「遊戲程式設計」(需加學 C++,不過 C++ 也以 C 作為基礎)、與「系統工具設計」走。它獨有的「指標」,會逼你接觸系統「底層」、並了解它的運作機制。
至於 Java 語言,個人認為它是「物件導向語言」最佳的入門選擇。學會後,可以走「Android 手機 App(就是使用 Java 語言)」、「網站開發」(需加學 JavaScript 與 PHP 為佳,不過它們兩者也與 Java 語法神似)、「資料庫程式設計」(雖不一定用 Java,但 Java 支援許多與資料庫開發的軟體框架,如:Hibernate,可以讓你寫起程式來更輕鬆)...等。
該先學哪一種,就看您有興趣的領域落在哪個語言的「勢力範圍」囉!很多朋友都問我該選哪本書比較好?根據我教電腦補習班 23 年(我從 1989 開始在台上教電腦)的經驗,我推薦以下兩本!真的真的是很棒的入門書,推薦出去從來沒有「漏氣」(台語:丟臉)過:
C 語言:
C 語言教學手冊(四版)
作者:洪維恩
出版社:旗標
出版日期:2007/04/20
博客來網址:http://www.books.com.tw/products/0010360466
Java 語言:
最新 Java 2 程式設計實例入門與活用-超值增訂(第四版)
作者:高橋麻奈
出版社:博碩
出版日期:2010/10/28
博客來網址:http://www.books.com.tw/products/0010485281
除了博客來之外,我也推薦一家書店:「益大書局」。老闆姓蕭,本身對電腦很熟,到店裡的書籍他都會翻看,斷定適用對象與目的(如:初學 vs. 有經驗者,或 自學書 vs. 參考書)。只要客人到店裡,報上買書的目的與自己的程度,老闆會以迅雷不及掩耳的速度,從書架各處把推薦書籍抽出一點點,然後開始滔滔不絕的介紹:「這本寫的比較詳細,可惜沒有 XXX 這部份...如果想快速學會,我推薦這本薄的...想買指令從 A 排到 Z 的,這本好!...可以搭配這本範例集,效果不錯...」。總之,買了這麼多年的電腦書,很少看到有人賣書賣得如此熱情的。他們家的折扣也都比其他電腦書店多,去的時候報我的名字「紀俊男推薦」試試看,說不定有意外的折扣(因為我很常跟他們買書)。
店面在光華商場附近的「地下電子廣場 B2」,就是新生南路與八德路交叉口,有個可以下去的樓梯,B2 只有他們一家書店,找一下應該找得到。店面雖然小,不過據說他的倉庫很大。他說:「店面只擺我看過、認可的好書!那些不怎麼樣的,就擱在倉庫,有人想買我一樣照出!這樣才有辦法降低店租負擔,然後打多點折扣與人競爭。」如果不在台北市的朋友,他們也提供郵寄到府,只要到這裡: http://etaitbook08.pixnet.net/blog/post/39595111 逛逛,想買哪一本打個電話給老闆(或老闆娘),據說很快就會收到了。聯絡資訊網站的最頂部有。
喔~不小心說多了...不知我若辦這幾本書的讀書會,有人會有興趣參加嗎?你會想先學哪一個呢?在底下留個言告訴我喔!若人夠多的話(15 個人以上)我或許可以想辦法來辦喔~