拓荒时代
国内的程序员大多是在 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和内存分配呢?答案很简单:当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为...
【行业技术】城市生活垃圾固体回收燃料在中国发展前景分析 .docx
随着一再拖延而即将发布的 Java9,G1(“Garbage First”)垃圾回收器将被成为 HotSpot 虚拟机默认的垃圾回收器。从 serial 垃圾回收器到CMS 收集器, JVM 见证了许多 GC 实现,而 G1 将成为其下一代垃圾回收器。 ...
综述了餐厨垃圾的资源化处理技术现状,重点对餐厨垃圾肥料化、饲料化、油脂回收和厌氧发酵产物回收利用等技术的工艺特点和存在问题进行了分析,并对餐厨垃圾资源化处理技术的发展方向进行了展望。
产品与服务:提供垃圾分类指导服务、垃圾回收服务、废品收购服务以及可回收物再利用服务。通过建立线上平台和线下回收网络,实现垃圾分类与资源回收的一体化服务。 定价策略:根据不同类型和规模的客户,制定相应的...
通过开展新技术,采用适合我国城市生活垃圾特点的处理方法,垃圾焚烧余热利用和填埋气体回收利用,以及有机垃圾高温堆肥和厌氧消化制沼气等;提倡垃圾综合利用。垃圾分类收集应与垃圾处理工艺相衔接,积极发展有机垃圾...
得出:随着JVM的发展,默认垃圾收集器变得越来越好了。JDK 1.2及以后版本所使用的分代垃圾收集器提供了比早期JDK所使用的标记-清除-整理收集器好得多的分配和收集性能。JDK 1.4.1通过增加新的针对多处理器系统和非常...
无人驾驶汽车 回收 信息 原材料 信息 设计 信息 制造 信息 物流 信息 销售 信息 产品全生命周期个性化定制与服务 智能家电5 智能制造技术发展与应用趋势全文共51页,当前为第5页。 智能产品:SmartHalo自行车导航...
结合目前我国实际情况及未来发展趋势,提出了我国煤矿充填开采的发展方向:应大力发展深井充填技术,提高煤矿深部开采资源回收率;高效利用采空区空间,布局煤炭地下产业;重点研发以淤泥、流沙、黄土、建筑垃圾及生活垃圾...
建筑垃圾分类和回收:对建筑垃圾进行分类和回收,将可再利用的垃圾进行资源化处理,减少对自然资源的依赖,同时减少垃圾的处理压力。 建筑垃圾资源化利用:将建筑垃圾进行资源化利用,如生产再生骨料、再生砖、再生...
4. 预约回收服务:居民可以在线预约家庭垃圾回收服务,系统自动分配就近的回收公司进行处理。 5. 数据统计与分析:对回收数据进行收集和分析,帮助管理者了解回收情况和趋势,以便优化资源分配和政策制定。 6. ...
网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。系统化是...
设计垃圾检测系统的意义在于多个方面,这些...这有助于推动相关技术的创新和发展。 系统的应用可以为其他领域提供借鉴和参考,推动技术进步和应用拓展。 经济效益与社会效益: 垃圾检测系统的应用可以降低垃圾处理成本
垃圾分类指南:提供详细的垃圾分类指南,包括可回收物、有害垃圾、湿垃圾和干垃圾的分类标准,以及各类垃圾的具体示例,帮助用户快速掌握分类知识。 垃圾识别功能:用户可以通过拍照或选择图片的方式,上传需要分类...
该项目采用先进的物理分选技术和生物降解方法,不仅能够有效减少垃圾量,还能回收有价值的资源,如金属、塑料和有机物等。报告中的数据支撑体现在对市场现状的深入分析上。据统计,XX地区日产生活垃圾量已达XXX吨,...
* 物质预备:收集一些废旧材料,如可乐瓶、果奶瓶、玻璃瓶、纸盒、废电池、废纸等,并准备两段录像短片(干净和脏乱小区的环境录像、垃圾分类回收和处理的科技短片) 三、活动过程: * 第一环节:了解垃圾的来源 ...
该工程不仅能够有效减少垃圾填埋带来的土地压力和环境污染,还能通过热能回收转化为电能,实现资源的再利用。在这份详细的可行性研究报告文档中,我们深入探讨了生活垃圾焚烧电厂的市场背景、技术路线、经济效益以及...
选择Nuseirat City作为案例研究,以评估回收箱的SWM,以使收集过程获得更少的成本和更少的时间,并确定卡车收集箱的最佳路线。 使用位置分配技术,研究表明,现有222个装箱中的50个装箱不满足所需的选择标准,需要...
方案包括采用先进的垃圾分类技术,提高回收利用率;引入生物降解技术,减少有害废物的产生;以及建立高效的污水处理系统,确保排放水质达标。此外,报告还涉及了项目的经济预算、市场分析、风险评估和预期收益等关键...
大街小巷,旅游景点,校园内部到处充斥着人类的生活垃圾,垃圾桶已经成为人们日常生活中常见的必备用品,每天长千上万个环卫工人,垃圾回收车辆忙碌在回收处理垃圾的第一线。回收处理垃圾是一件费时费力的工作,每天...