拓荒时代
国内的程序员大多是在 Java 语言中第一次感受到垃圾收集技术的巨大魅力的,许多人也因此把 Java 和垃圾收集看成了密不可分的整体。但事实上,垃圾收集技术早在 Java 语言问世前 30 多年就已经发展和成熟起来了, Java 语言所做的不过是把这项神奇的技术带到了广大程序员身边而已。
如果一定要为垃圾收集技术找一个孪生兄弟,那么, Lisp 语言才是当之无愧的人选。 1960 年前后诞生于 MIT 的 Lisp 语言是第一种高度依赖于动态内存分配技术的语言: Lisp 中几乎所有数据都以“表”的形式出现,而“表”所占用的空间则是在堆中动态分配得到的。 Lisp 语言先天就具有的动态内存管理特性要求 Lisp 语言的设计者必须解决堆中每一个内存块的自动释放问题(否则, Lisp 程序员就必然被程序中不计其数的 free 或 delete 语句淹没),这直接导致了垃圾收集技术的诞生和发展——说句题外话,上大学时,一位老师曾告诉我们, Lisp 是对现代软件开发技术贡献最大的语言。我当时对这一说法不以为然:布满了圆括号,看上去像迷宫一样的 Lisp 语言怎么能比 C 语言或 Pascal 语言更伟大呢?不过现在,当我知道垃圾收集技术、数据结构技术、人工智能技术、并行处理技术、虚拟机技术、元数据技术以及程序员们耳熟能详的许多技术都起源于 Lisp 语言时,我特别想向那位老师当面道歉,并收回我当时的幼稚想法。
知道了 Lisp 语言与垃圾收集的密切关系,我们就不难理解,为什么垃圾收集技术的两位先驱者 J. McCarthy 和 M. L. Minsky 同时也是 Lisp 语言发展史上的重要人物了。 J. McCarthy 是 Lisp 之父,他在发明 Lisp 语言的同时也第一次完整地描述了垃圾收集的算法和实现方式; M. L. Minsky 则在发展 Lisp 语言的过程中成为了今天好几种主流垃圾收集算法的奠基人——和当时不少技术大师的经历相似, J. McCarthy 和 M. L. Minsky 在许多不同的技术领域里都取得了令人艳羡的成就。也许,在 1960 年代那个软件开发史上的拓荒时代里,思维敏捷、意志坚定的研究者更容易成为无所不能的西部硬汉吧。
在了解垃圾收集算法的起源之前,有必要先回顾一下内存分配的主要方式。我们知道,大多数主流的语言或运行环境都支持三种最基本的内存分配方式,它们分别是:
一、静态分配( Static Allocation ):静态变量和全局变量的分配形式。我们可以把静态分配的内存看成是家里的耐用家具。通常,它们无需释放和回收,因为没人会天天把大衣柜当作垃圾扔到窗外。
二、自动分配( Automatic Allocation ):在栈中为局部变量分配内存的方法。栈中的内存可以随着代码块退出时的出栈操作被自动释放。这类似于到家中串门的访客,天色一晚就要各回各家,除了个别不识时务者以外,我们一般没必要把客人捆在垃圾袋里扫地出门。
三、动态分配( Dynamic Allocation ):在堆中动态分配内存空间以存储数据的方式。堆中的内存块好像我们日常使用的餐巾纸,用过了就得扔到垃圾箱里,否则屋内就会满地狼藉。像我这样的懒人做梦都想有一台家用机器人跟在身边打扫卫生。在软件开发中,如果你懒得释放内存,那么你也需要一台类似的机器人——这其实就是一个由特定算法实现的垃圾收集器。
也就是说,下面提到的所有垃圾收集算法都是在程序运行过程中收集并清理废旧“餐巾纸”的算法,它们的操作对象既不是静态变量,也不是局部变量,而是堆中所有已分配内存块。
相关推荐
经过半个世纪的发展,内存的动态分配与内存回收技术已经相当成熟,一切看起来都进入了“自动化”时代,那为什么我们还要去了解GC和内存分配呢?答案很简单:当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为...
"垃圾分类回收与可持续发展" 垃圾分类回收是当前环境保护和可持续发展的重要议题。随着经济的发展和人民生活水平的提高,生活垃圾的数量也在不断增加。然而,垃圾中的许多部分仍然具有利用价值,甚至是一些不可多得...
建筑垃圾回收利用参照.pdf 建筑垃圾回收利用是当前我国亟待解决的环境问题之一。...只有通过加强政策支持、企业投资和技术创新,推进建筑垃圾回收利用工作,才能更好地保护我们的环境,实现可持续发展。
基于微信小程序的社区垃圾回收管理系统的设计与...基于微信小程序的社区垃圾回收管理系统的发展方向包括智能回收、自动化处理、数据分析等方面。这些方向可以提高系统的智能化和自动化程度,提高用户的满意度和体验度。
【行业技术】城市生活垃圾固体回收燃料在中国发展前景分析 .docx
随着一再拖延而即将发布的 Java9,G1(“Garbage First”)垃圾回收器将被成为 HotSpot 虚拟机默认的垃圾回收器。从 serial 垃圾回收器到CMS 收集器, JVM 见证了许多 GC 实现,而 G1 将成为其下一代垃圾回收器。 ...
综述了餐厨垃圾的资源化处理技术现状,重点对餐厨垃圾肥料化、饲料化、油脂回收和厌氧发酵产物回收利用等技术的工艺特点和存在问题进行了分析,并对餐厨垃圾资源化处理技术的发展方向进行了展望。
产品与服务:提供垃圾分类指导服务、垃圾回收服务、废品收购服务以及可回收物再利用服务。通过建立线上平台和线下回收网络,实现垃圾分类与资源回收的一体化服务。 定价策略:根据不同类型和规模的客户,制定相应的...
通过开展新技术,采用适合我国城市生活垃圾特点的处理方法,垃圾焚烧余热利用和填埋气体回收利用,以及有机垃圾高温堆肥和厌氧消化制沼气等;提倡垃圾综合利用。垃圾分类收集应与垃圾处理工艺相衔接,积极发展有机垃圾...
该系统通过线上互联网信息智能化加物联网,与线下城市生活垃圾回收处理相结合,实现对城市生活垃圾智能高效处理回收,降低城市生活垃圾回收处理成本,提高有效回收效率,为节能绿色生活作出贡献。 知识点: 1. ...
在当前,我国的垃圾处理技术已经相对成熟,但是垃圾分类管理仍然存在一些问题,例如垃圾分类标准不统一、垃圾回收体系不够规范等。 基于大数据技术的垃圾分类管理模式可以通过数据挖掘、机器学习、云计算等技术手段...
中国智能垃圾分类行业产业链具备资金壁垒、技术壁垒高等特点,其产业链上游参与者以提供相关技术的供应商为主,中游参与者为智能垃圾分类厂商,下游为垃圾回收端与应用端。 根据头豹分析师测算,中国智能垃圾分类...
废旧电器回收利用项目可行性分析报告 ...7. 废旧电器回收利用项目的工艺方案选择及确定包括电子垃圾处理技术发展状况、电子垃圾处理技术选择等内容。 资源链接: * 废旧电器回收利用项目可行性分析报告.pdf
得出:随着JVM的发展,默认垃圾收集器变得越来越好了。JDK 1.2及以后版本所使用的分代垃圾收集器提供了比早期JDK所使用的标记-清除-整理收集器好得多的分配和收集性能。JDK 1.4.1通过增加新的针对多处理器系统和非常...
该学科在其自身的发展过程中,逐步打破了各学科之间的界限,并有机地融合了各相关学科的理论,不断地完善自身的基本概念、理论体系、研究方法以及技术标准和规范,从而形成了一门研究和应用范围极为广泛的综合性边缘...
该技术通过采用风冷模块式冷热水机组、废热循环利用回收装置、膜生物反应处理等技术,实现了垃圾渗滤液的有效处理和资源化。 技术详情 垃圾渗滤液处理技术采用了一系列的技术手段,包括: 1. 风冷模块式冷热水...
智能分类垃圾桶的研究思路和方法可以为类似项目提供参考和借鉴,可以推动相关技术的发展和应用。 智能分类垃圾桶的设计和实现需要考虑到多方面的因素,包括硬件结构、软件程序、检测技术、分类算法等方面的设计和...
无人驾驶汽车 回收 信息 原材料 信息 设计 信息 制造 信息 物流 信息 销售 信息 产品全生命周期个性化定制与服务 智能家电5 智能制造技术发展与应用趋势全文共51页,当前为第5页。 智能产品:SmartHalo自行车导航...
结合目前我国实际情况及未来发展趋势,提出了我国煤矿充填开采的发展方向:应大力发展深井充填技术,提高煤矿深部开采资源回收率;高效利用采空区空间,布局煤炭地下产业;重点研发以淤泥、流沙、黄土、建筑垃圾及生活垃圾...
在行业与市场分析方面,本方案主要考虑了我国建筑垃圾回收再利用的现状和发展趋势,了解我国建筑垃圾资源化的对策,了解我国建筑垃圾再生产品的市场需求和发展趋势。 在建设规模和产品方案方面,本方案主要考虑了...