• 内存管理器如何知道何时可以释放内存?
    • 一般我们不知道下一步会用到什么,因为这取决于具体条件
    • 但是我们知道如果没有指针,某些块就不能被使用
  • 必须做些关于指针的假设
    • 内存管理器可以区分指针和非指针
    • 所有指针都指向一个块的起始地址
    • 无法隐藏指针(e.g., by coercing them to an int, and then back again)
  • 经典的垃圾收集算法
    • Mark-and-sweep collection (McCarthy, 1960) 标记-清除算法
      • 不移动块 (除非要 “紧凑”)
    • Reference counting (Collins, 1960) 引用计数
      • 不移动块 (未讨论)
    • Copying collection (Minsky, 1963) 复制收集
      • 移动块 (未讨论)
    • Generational Collectors (Lieberman and Hewitt, 1983)
      • 基于生命期的收集
        • 大部分分配很快就会变成垃圾
        • 因此回收工作的重点应该是刚刚分配的内存区域