学习垃圾收集理论[关闭]

问题描述 投票:10回答:4

我想学习垃圾收集背后的理论。我该怎么做呢?显而易见的答案是 - 编译器教科书......问题是,是否有必要学习词法分析,解析和其他通常在文本中垃圾收集之前的东西?

简而言之,了解垃圾收集理论的先决条件是什么?

P.S - 我知道解析,词法分析等的目的是什么。只是不知道它们是如何实现的。

language-agnostic garbage-collection theory
4个回答
19
投票

按顺序阅读这些文章。它们处于渐进主题/难度顺序(不是按时间顺序排列)。

列表直接来自Prof. Kathryn McKinley's Memory Management course page here,在那里你可以找到所有文章的链接。

我上学期参加了课程,所以我读了所有这些,我不得不说我学到了我要学习的东西!

请注意,下面大部分论文的免费副本链接都包含在https://stackoverflow.com/tags/garbage-collection/info标签维基中。

  • 列出在串行计算机上实时处理,Baker,CACM,21(4)280--294,1978。
  • 非递归列表压缩算法,Cheney,CACM,13(11):677-678,1970。
  • 基于物体寿命的实时垃圾收集器,Lieberman&Hewitt,CACM,26(6):419--429,1983。
  • 生成清除:无中断的高性能存储回收算法,Ungar,Proceedings of the first ACM SIGSOFT / SIGPLAN Software Engineering Symposium on Practical Software Development Environments,1984,pages 157-167。
  • 简单的世代垃圾收集和快速分配,Appel,软件 - 实践和经验19(2):171 - 183,1989年2月。
  • 基于年龄的垃圾收集,D。Stefanovic,K。S. McKinley,J。E. B. Moss,ACM面向对象编程系统,语言和应用会议。 (OOPSLA),第370-381页。丹佛CO,1999年11月。
  • 实践中的老年垃圾收集:Java虚拟机中的评估,D。Stefanovic,M。Hertz,SM Blackburn,KS McKinley和JEB Moss,Memory System Performance,Berlin,Germany,pp.175-184,2002年6月。
  • 环路:围绕垃圾收集Gridlock,S.M.Blackburn,R。Jones,K。S. McKinley和J. E. B. Moss,ACM Conference on Programming Language Design and Implementation,Berlin,Germany,pp.153-164,2002年6月。
  • 一种有效的与机器无关的程序,用于各种列表结构中的垃圾收集,Schorr&Waite,CACM,10(8):501--506,1967。
  • 用于垃圾收集的压缩算法的比较,Cohen&Nicolau,ACM Programming on Programming Languages and Systems(TOPLAS),Volume 5,Issue 4,pages 532 - 553,1983年10月。
  • MC2:针对内存受限环境的高性能垃圾收集,Sachindran,Berger&Moss,面向对象编程系统,语言和应用的ACM会议,第81-96页,温哥华,不列颠哥伦比亚省,2004年10月。
  • Immix:具有空间效率,快速收集和Mutator性能的Mark-Region垃圾收集器,Blackburn&McKinley,ACM Conference on Programming Language Design and Implementation,pp.22--32,Tucson,AZ,June 2008。
  • 一种高效的增量自动垃圾收集器,Deutsch&Bobrow,CACM,19(9):522--526,1976年9月。
  • 暗参考计数:没有等待的快速垃圾收集,S.M.Blackburn和K. S. McKinley,ACM 2003 SIGPLAN会议论文集,面向对象编程系统,语言和应用,第344-359页,加利福尼亚州,Annehiem,2003年10月。
  • 循环追踪:高效的并发Mark-Sweep循环收集,Frampton和Blackburn,2009年。(提交给ISMM。)
  • Multiprocessing compactifying garbage collection,Guy L. Steele,Jr.,CACM 18(9):495-508,1975。
  • 即时垃圾收集:合作练习,E. W. Dijkstra,L。Lamport,A。J. Martin,C。S. Scholten和E. F. M. Steffens,ACM通讯,21(11):966--975,1978年11月。
  • 保持并发垃圾收集算法的正确性,Vechev,Yahav和Bacon,ACM Conference on Programming Language Design and Implementation,Ottawa,Ontario,pp.341-353,2006。
  • 一种具有低开销和一致利用率的实时垃圾收集器,Bacon,Cheng和Rajan,ACM Symposium on Programming of Programming Languages,New Orleans,Louisiana,pp.285-298,2003。
  • 税收和支出:实时垃圾收集的民主安排,Auerbach,Bacon,Cheng,Grove,Biron,Gracie,McCloskey,Micic和Sciampacone,ACM国际嵌入式软件会议,亚特兰大,GA,第245-254页,2008。
  • 在不合作的环境中收集垃圾,H.Boehm和M.Weiser,Software Practice and Experience,18(9):807-820,1988。
  • Hoard:用于多线程应用程序的可扩展内存分配器,ED Berger,KS McKinley,RD Blumofe和PR Wilson,第九届国际编程语言和操作系统架构支持会议,马萨诸塞州剑桥,第117 - 128页,2000年11月。
  • Cork:Garbage-Collected Languages的动态内存泄漏检测,Jump&McKinley,提交给ACM软件实践和经验交易,2009年。(缩写版本出现在ACM Conference on Programming Languagesm,Nice,France,2009年1月。)
  • 泄漏修剪,邦德和麦金利,ACM建筑支持编程语言和操作系统会议,华盛顿特区,2009年3月。(出现。)
  • Free-me:个人物体回收的静态分析,Guyer&McKinley,ACM会议编程语言设计与实现会议,加拿大渥太华,第364-375页,2006年6月。
  • 垃圾收集可以比堆栈分配更快,Appel,Information Processing Letters 25(4):275-279,1987 June 1987。
  • 垃圾收集优势:改善项目地点Huang,Blackburn,McKinley,Moss,Wang,&Cheng,ACM Conference on Object-Oriented Programming Systems,Languages,&Applications,Vancouver,BC,pp.69-80,2004年10月。
  • 揭秘魔术:高级低级编程,Daniel Frampton,Stephen M. Blackburn,Perry Cheng,Robin Garner,David P. Grove,J。Eliot B. Moss和Sergey I. Salishev。 ACM国际虚拟执行环境会议,华盛顿特区,2009年3月。(出现。)
  • 神话和现实:垃圾收集的性能影响,S.M.Blackburn,P。Cheng和K. S. McKinley,ACM SIGMETRICS计算机系统测量和建模会议,第25-36页,纽约,纽约,2004年6月。
  • 统一的垃圾收集理论,Bacon,Cheng和Rajan,ACM会议,面向对象编程,系统,语言和应用,加拿大温哥华,加拿大,第50-68页,2004年。

14
投票

我想学习垃圾收集背后的理论。我该怎么做呢?

我也是一个对垃圾收集感兴趣的dabbler(我写了自己的垃圾收集VM,称为HLVM)。我通过阅读尽可能多的关于垃圾收集的研究论文来学习,因为我可以亲自动手并自己玩这些想法,既可以在我的虚拟机中生成,也可以通过编写内存安全的高级模拟。

显而易见的答案是 - 编译器教科书......问题是,是否有必要学习词法分析,解析和其他通常在文本中垃圾收集之前的东西?

词法分析,解析和其他东西与垃圾收集无关。您可能会从编译器书籍中获得有关垃圾收集的过时粗略概述,但您需要阅读研究论文以获取最新视图,例如:关于多核。

简而言之,了解垃圾收集理论的先决条件是什么?

您需要了解基本图论,指针,堆栈,线程和(如果您对多线程感兴趣)低级并发原语(如锁)。

垃圾收集就是确定可达性。当程序无法再获取对值的引用,因为该值已无法访问时,GC可以回收值占用的内存。可达性是通过从一组“全局根”(线程堆栈和核心寄存器中的全局变量和指针)开始遍历堆来确定的。

GC设计有许多方面,但您可以从四个主要的垃圾收集算法开始:

  • 马克思(McCarthy,1960)
  • 马克与契约(Haddon和Waite,1967)
  • 停止复制(Cheney,1970)
  • 标记区域(McKinley等,2007)

也许这些基本概念最引人注目的演变是分代垃圾收集,这是多年来事实上的标准设计。

我个人的感觉是,一些关于垃圾收集的模糊工作传达了同样多的有用信息,所以我也强烈建议:

您可能还想研究三种写屏障(Dijkstra's,Steele's和Yuasa's),并查看卡片标记和记忆设置技巧。

然后,您可能还想检查一些实现者为Java和.NET等语言实现选择的实际设计决策,以及Standard ML的SML / NJ编译器,OCaml编译器,Glasgow Haskell编译器等。采用的技术之间的差异与它们之间的相似之处一样大!

还有一些很好的切向相关的论文,如亨德森的Accurate Garbage Collection in an Uncooperative Environment。我使用该技术来避免为HLVM编写堆栈walker。

memorymanagement.org网站是一个宝贵的资源,特别是GC相关术语的词汇表。


11
投票

有一本关于垃圾收集的书,如果我可以添加一个相当不错的书:

Richard Jones和Rafael Lins,Garbage Collection,Wiley and Sons(1996),ISBN 0471941484

理查德琼斯还有一个很好的网站收集garbage collection resources

大多数早期的垃圾收集文件都非常易读。你可以从保罗威尔逊对"Uniprocessor Garbage Collection Techniques"(1992,LNCS vol.637)的调查开始,然后深入探讨有关主题的原始文献。


-2
投票

您可能还想看看Squeak: Open Personal Computing,它涵盖了Squeak Smalltalk垃圾收集器,以及其他ST设计问题。您还应该看看Squeak itself - 它几乎完全用Smalltalk编写,包括GC在内的所有源代码都是免费提供的,并且使用Smalltalk浏览器可以轻松学习。

© www.soinside.com 2019 - 2024. All rights reserved.