Garbage Collection Algorithms

自动内存管理技术。

你将会学到的

  • 计算机程序中自动内存管理背后的算法和数据结构。
  • 内存管理历史:静态、堆栈、堆分配
  • 虚拟内存和内存布局
  • 跟踪与直接收集器
  • 语义与句法垃圾
  • Mark-Sweep 垃圾收集器
  • Mark-Compact 收集器
  • 引用计数收集器
  • 复制收集器
  • 分代收集器
  • 并行、增量、并发收集器
  • 三色抽象和标记
  • 气相色谱障碍

要求

  • 基本数据结构和算法(树、图、链表等)
  • 计算机内存基础知识(字节、地址、指针)

说明

垃圾收集器的要点

内存泄漏悬空指针是手动内存管理的主要问题。你删除了链表中的一个父节点,忘记了先删除它的所有子节点——你的内存正在泄漏。你以正确的顺序删除了一个对象链——但是你的程序突然崩溃了,因为你忘记了这个资源的第二个所有者,它现在试图取消引用一个空指针。

为了避免这些问题,大多数现代高级编程语言都实现了自动内存管理。您手动分配对象,但不必为它们的释放而烦恼:一个特殊的程序垃圾收集器知道如何正确地自动释放它们,并回收以供将来重用。

垃圾收集器基础课程中,我们学习了与自动内存管理相关的所有不同技术和算法,这些技术和算法如今已在实践中使用。

这门课是为谁准备的?

首先,对于编译器工程师

在实现您的编程语言时,您很有可能需要实现一个垃圾收集器。即使是最初定位为“内存安全”的语言,例如 Rust,最终也实现了自动引用计数 (ARC)和其他收集器。

重申一下:在大多数现代高级编程语言中,垃圾收集器模块(或多个GC 模块,如在 Java 中)在今天几乎是必需的。

如果我不是每天都实现编程语言怎么办?

如果你不是编译器工程师,那么这个类对你来说仍然很有趣。一般来说,实现垃圾收集器或内存管理器是一项非常高级的工程任务。这是一个简单的技巧:你进行一些复杂的项目(例如垃圾收集器、编译器、解释器等),并在构建它的同时学习所有不同的数据结构和算法。然后回到“日常编程”,作为一名更好的工程师进行改进,具有复杂系统的可转移通用知识。

这个项目需要 C 或 C++ 吗?

并不真地!当然,C 和 C++ 可能是用于原始内存操作的最佳语言并且非常适合这里,但是在课程中我们研究通用设计算法并主要关注垃圾收集器和内存分配器的理论方面。这意味着您可以用任何您想要的语言来实现它们。例如,您可以在 JavaScript 中为虚拟堆分配一个 `ArrayBuffer` ,或者类似地在 Python、Rust 等中分配一个 `bytearray`。

课程中的大多数算法都是用通用伪代码描述的,因此您可以将它们移植到任何语言。

这门课有什么特别的?

这些讲座的主要内容是:

  • 简明扼要。每个讲座都是自给自足的,简洁的,并描述与主题直接相关的信息,而不是分散在不相关的材料或谈话上。
  • 动画演示实时编辑笔记相结合。这使得对主题的理解更容易,并显示对象结构是如何(以及何时)连接的。静态幻灯片根本不适用于复杂的内容。

阅读材料

作为本课程的进一步阅读和附加文献,推荐以下书籍:

  • 垃圾收集手册: Antony Hosking、Eliot Moss 和 Richard Jones的自动内存管理艺术
  • 编译器设计手册: YN Srikant、Priti Shankar 的优化和机器代码生成

此课程面向哪些人:

  • 编译器工程师
  • 所有好奇的工程师,愿意实施一个复杂的项目来学习不同的内存管理算法(通用知识可以转移到其他系统)
声明:本站所有资源、素材等全部来源于互联网,赞助VIP仅用于对IT资源服务器带宽等费用支出做支持,从本站下载资源,说明你已同意本条款。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
TheItzy资源站 » Garbage Collection Algorithms