Pra*_*nav 11 language-agnostic theory garbage-collection
我想学习垃圾收集背后的理论.我该怎么做呢?显而易见的答案是 - 编译器教科书......问题是,是否有必要学习词法分析,解析和其他通常在文本中垃圾收集之前的东西?
简而言之,了解垃圾收集理论的先决条件是什么?
PS - 我确实知道解析,词法分析等的目的是什么.只是不知道它们是如何实现的.
Sam*_*ell 20
按顺序阅读这些文章.它们处于渐进主题/难度顺序(不是按时间顺序排列).
我上学期参加了课程,所以我读了所有这些,我不得不说我学到了我要学习的东西!
Jon*_*rop 14
我想学习垃圾收集背后的理论。我该怎么办?
我也是对垃圾收集感兴趣的涉猎者(到目前为止,我编写了自己的称为HLVM的垃圾收集VM )。我通过阅读尽可能多的有关垃圾回收的研究论文以及自己玩弄的想法中学到了东西,这些想法既存在于虚拟机中,也存在于编写内存安全的高级模拟中。
明显的答案是-编译器教科书...问题是,有必要学习通常在文本中进行垃圾收集之前的词法分析,解析和其他内容吗?
词法分析,解析和其他内容与垃圾回收无关。您可能会从编译器书中获得垃圾收集的过时粗略概述,但是您需要阅读研究论文才能获得最新的观点,例如关于多核的观点。
简而言之,学习垃圾收集理论的先决条件是什么?
您需要了解基本的图论,指针,堆栈,线程和(如果您对多线程感兴趣)低级并发原语(例如锁)。
垃圾收集就是确定可达性。当程序由于无法访问该值而无法再获取对该值的引用时,GC可以回收该值所占用的内存。通过从一组“全局根”(线程栈和内核寄存器中的全局变量和指针)开始遍历堆来确定可到达性
GC设计有很多方面,但是您可能会从四种主要的垃圾收集算法开始:
这些基本思想的最显着发展也许就是分代垃圾收集,这是多年来的实际标准设计。
我个人的感觉是,有关垃圾收集的一些晦涩的工作传达了同样多的有用信息,因此我强烈建议:
您可能还想研究三种写障碍(Dijkstra,Steele和Yuasa的写障碍),并研究卡片标记和记忆设置技术。
然后,您可能还想检查一些实现者为Java和.NET等语言实现以及标准ML的SML / NJ编译器,OCaml编译器,Glasgow Haskell编译器等选择的实际设计决策。所采用技术之间的差异与它们之间的相似之处一样大!
还有一些与切线相关的重要论文,例如在不合作的环境中亨德森的《准确的垃圾收集》。我使用该技术来避免必须为HLVM编写堆栈行程序。
该memorymanagement.org网站是一个非常宝贵的资源,气相色谱-相关方面尤其是词汇。
ear*_*arl 11
有一本关于垃圾收集的书,如果我可以添加一个相当不错的书:
Richard Jones和Rafael Lins,Garbage Collection,Wiley and Sons(1996),ISBN 0471941484
理查德琼斯还有一个很好的网站收集垃圾收集资源.
大多数早期的垃圾收集文件都非常易读.你可以从保罗威尔逊对"单处理器垃圾收集技术"(1992,LNCS vol.637)的调查开始,然后深入探讨有关主题的原始文献.