拓荒时代
国内的程序员大多是在 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 ):在堆中动态分配内存空间以存储数据的方式。堆中的内存块好像我们日常使用的餐巾纸,用过了就得扔到垃圾箱里,否则屋内就会满地狼藉。像我这样的懒人做梦都想有一台家用机器人跟在身边打扫卫生。在软件开发中,如果你懒得释放内存,那么你也需要一台类似的机器人——这其实就是一个由特定算法实现的垃圾收集器。
也就是说,下面提到的所有垃圾收集算法都是在程序运行过程中收集并清理废旧“餐巾纸”的算法,它们的操作对象既不是静态变量,也不是局部变量,而是堆中所有已分配内存块。
相关推荐
垃圾回收技术的不断发展离不开硬件性能的提升。硬件的发展促进了计算机科学的进步,包括垃圾回收算法在内的各种技术得以实现并不断完善。如今,编程老手们对垃圾回收技术的理解和使用,往往需要深入研究算法原理并...
物联网技术在其中发挥着核心作用,通过在垃圾回收点部署传感器,实现垃圾量的实时监测;通过无线通信网络将数据传送到数据处理中心;利用数据处理中心的软件系统进行数据分析和统计,为决策者提供科学依据;最后通过...
JVM中的垃圾回收器经历了多代发展,包括串行回收器、并行回收器、并发标记扫描(CMS)、垃圾优先(G1)回收器等。这些回收器根据执行方式、算法和内存管理策略有所不同: - **串行回收器**:单线程执行,适合小型...
本文将详细探讨JVM的发展历程以及内存管理中的垃圾回收机制。 一、JVM的历史发展 1. **早期阶段**:1995年,Sun Microsystems发布了Java的第一个版本,JVM作为其核心组成部分,主要应用于嵌入式设备和网络应用。初...
例如,杭州采用智能垃圾分类回收设备,通过实名制和一户一码的方式,利用二维码技术引导居民正确分类,并通过“环保金”制度激励居民参与。 然而,尽管取得了一些成效,杭州的垃圾分类回收还面临着诸多问题,如宣传...
通过以上知识点,垃圾回收物流仿真系统设计不仅有助于提高城市环境卫生管理水平,还能促进资源循环利用,实现绿色可持续发展。在实践中,该系统设计的文档(如“垃圾回收物流仿真系统设计.doc”)可能包含了详细的...
总体来看,中国垃圾回收处理行业正在经历深刻的变革,政策、技术和社会参与度的提升都在为行业的可持续发展注入新的活力。面对日益严峻的环境挑战,这个行业的重要性只会继续增强,而有效的垃圾处理和回收策略将是...
随着Flex的发展,其垃圾回收机制逐渐转向了更复杂的可达性分析算法。这种算法通过追踪从根对象(如全局变量、栈上的局部变量等)到其他所有对象的引用链,无法从根对象到达的对象被认为是不可达的,因此可以被视为...
【垃圾分类回收小程序Demo】是一款基于移动端的应用程序,旨在提高公众对垃圾分类的认识并推动垃圾的有效回收。...随着技术的发展和用户需求的提升,此类小程序有望在未来发挥更大的作用,推动社会向更环保的方向迈进。
垃圾回收技术主要包括物理回收和化学回收两种方法。物理回收是指通过物理手段将可回收物从垃圾中分离出来,并进行加工处理。化学回收是指通过化学反应将废弃物转化为有价值的资源。 3. 垃圾回收的作用 垃圾回收在...
【描述】:该文档提出了一个关于构建建筑垃圾回收循环利用应用程序(APP)的概念,旨在解决建筑垃圾处理的问题,推动循环经济和绿色经济的发展。 【标签】:APP应用开发,数据分析,参考文献,专业指导 【正文】:...
而基于STM32单片机的垃圾分类回收监测系统,正是科技进步与环保理念相结合的产物,旨在提高垃圾处理效率,降低环境污染,推动可持续发展。 STM32单片机是意法半导体(STMicroelectronics)推出的一种基于ARM Cortex...
深入探索 JVM 垃圾回收:ARM 服务器垃圾回收的挑战和优化 JVM 垃圾回收是 Java 内存管理的重要组成部分,...随着计算机技术的不断发展,JVM 垃圾回收技术将不断完善和进步,为应用程序提供更加稳定、高效的运行环境。
在当前环保意识日益增强的背景下,垃圾回收行业作为可持续发展的重要组成部分,其市场潜力和战略价值不容忽视。2021年至2026年,面对激烈的市场竞争,垃圾回收企业如何成功突围并实现长期稳定的发展,成为了业界关注...
这一机制最早出现在Lisp语言中,随着技术的发展,垃圾回收的概念被广泛应用于多种现代编程环境,如Java虚拟机(JVM)、.NET Common Language Runtime (CLR)等。本文将详细介绍几种常见的垃圾回收算法,并分析它们的...
【电子垃圾回收现状】 在电子垃圾回收领域,欧洲国家处于全球领先地位。自2003年起,欧盟通过《关于在电气电子设施...未来,电子垃圾回收的可持续发展和技术创新将是全球关注的重点,以确保资源的循环利用和环境保护。
2017年发布的《生活垃圾分类制度实施方案》要求多个城市实施强制垃圾分类,以提升生活垃圾回收利用率。随后,上海、北京、成都等地相继出台相关法规,进一步加强垃圾分类的执行力度。垃圾分类不仅能够有效减少占地和...