大部分内容来自于:
垃圾回收(garbage collection)机制的基本原则是:
1. 找出程序中不会再被访问到的对象。
2. 回收这部分对象占用的资源(内存)。
不同语言对垃圾回收机制的支持不同,有一些将它当成语言必备的一部分(Java,C#,lua,python),有一些将它当成语言可选的一部分,有一些则不直接提供支持,但可以通过扩展库来实现(C,C++)。
与垃圾回收机制相对的是手动管理内存。手动管理内存使程序编写起来变得复杂,在不小心的情况下容易出现错误,比如空指针、野指针、内存泄漏等。
使用垃圾回收机制可以简化代码编写,减少出错的情况。但它本身也是有诸多缺点的:
- 垃圾回收器要决定哪些对象该被删除,哪些对象该被保留,这显然会需要消耗一定的计算机资源。比如可能需要空间来存储辅助标志位,可能需要时间来进行遍历和标记。
- 垃圾回收发生的时间往往是不可预料的。这显然不适合在实时环境、事务处理或交互场景中使用。
- 一些系统资源是无法直接被垃圾回收器简单回收的,比如文件句柄、socket等资源,仍然需要程序员显式的去操作。
本来想写完,后来发现基本上完全在参照,加入不了自己的想法,所以就不继续写了。这个wikipedia里的内容非常的详细。另外描述了另一种垃圾回收算法。