垃圾收集算法
自动内存管理技术
讲师:Dmitry Soshnikov
口袋资源独家Udemy付费课程,独家中英文字幕,配套资料齐全!
用不到1/10的价格,即可享受同样的高品质课程,且可以完全拥有,随时随地都可以任意观看和分享。
你将会学到的
- 计算机程序中自动内存管理背后的算法和数据结构。
- 内存管理历史:静态、堆栈、堆分配
- 虚拟内存和内存布局
- 追踪与直接收集者
- 语义与句法垃圾
- Mark-Sweep 垃圾收集器
- Mark-Compact收集器
- 引用计数收集器
- 复制收集器
- 世代收藏家
- 并行、增量、并发收集器
- 三色抽象和标记
- GC 障碍
要求
- 基本数据结构和算法(树、图、链表等)
- 计算机内存基础知识(字节、地址、指针)
说明
垃圾收集器的要点
内存泄漏和悬空指针是手动内存管理的主要问题。你在链表中删除了一个父节点,忘记先删除它的所有子节点——你的内存就会泄漏。你以正确的顺序删除了一个对象链——但是突然间你的程序崩溃了,因为你忘记了这个资源的第二个所有者,它现在试图取消引用一个空指针。
为了避免这些问题,大多数现代高级编程语言都实现了自动内存管理。您手动分配对象,但不要为它们的释放而烦恼:一个特殊的程序,垃圾收集器,知道如何正确地自动释放它们,并回收以供将来重用。
在垃圾收集器基础课程中,我们学习了与自动内存管理相关的所有不同技术和算法,这些技术和算法今天在实践中使用。
这堂课是给谁的?
首先,对于编译器工程师。
在实现您的编程语言时,您很有可能需要实现垃圾收集器。即使是最初定位为“内存安全”的语言,例如 Rust,最终也实现了自动引用计数 (ARC)和其他收集器。
重申一下:在大多数现代高级编程语言中,垃圾收集器模块(或多个GC 模块,如 Java)在今天几乎是必需的。
如果我不是每天都实现编程语言怎么办?
如果您不是编译器工程师,那么该课程对您来说仍然很有趣。一般来说,实现垃圾收集器或内存管理器是一项相当高级的工程任务。这是一个简单的技巧:您进行一些复杂的项目(例如垃圾收集器、编译器、解释器等),并在构建它时学习所有不同的数据结构和算法。然后回到“日常编程”,通过复杂系统的可转移通用知识,作为一名更好的工程师得到改进。
这个项目需要 C 或 C++ 吗?
并不真地!当然,C 和 C++ 可能是原始内存操作的最佳语言并且非常适合这里,但是在课程中我们研究通用设计算法并且主要关注垃圾收集器和内存分配器的理论方面。这意味着您可以用任何您想要的语言来实现它们。例如,您可以在 JavaScript 中为虚拟堆分配一个“ArrayBuffer” ,或者类似地在 Python、Rust 等中分配一个“bytearray”。
课程中的大部分算法都是用通用伪代码描述的,因此您可以将它们移植到任何语言。
这堂课有什么特点?
这些讲座的主要内容是:
- 简洁明了。每节课都是自给自足的、简洁的,并描述了与主题直接相关的信息,而不是分散在不相关的材料或谈话上。
- 动画演示与实时编辑笔记相结合。这使得主题的理解更容易,并显示了对象结构是如何(以及何时)连接的。静态幻灯片根本不适用于复杂的内容。
阅读材料
作为本课程的进一步阅读和其他文献,推荐以下书籍:
- 垃圾收集手册:自动内存管理的艺术Antony Hosking、Eliot Moss 和 Richard Jones
- 编译器设计手册:优化和机器代码生成YN Srikant,Priti Shankar
此课程面向哪些人:
- 编译器工程师
- 所有好奇的工程师,愿意实施一个复杂的项目来学习不同的内存管理算法(通用知识可以转移到其他系统)