垃圾收集也叫垃圾回收, 英语 Garbage Collection (GC). 最早在 LISP 中实现. 目前很多语言支持垃圾收集.
垃圾收集是一种内存管理技术, 可以大大减轻开发人员的内存管理负担. 在不支持垃圾收集的语言中, 开发人员需要小心地分配, 传递, 释放内存, 稍有不慎, 就会造成指针失效, 内存溢出, 内存泄露等各种内存管理错误.
基本概念和原理
内存和对象的概念:
内存可以分配给对象, 释放后可以重新分配给其他对象.
对象被删除时释放分配给它的内存
对象之间可以有引用关系
垃圾收集的基本原理是, 如果可以确定某个对象在程序未来的运行中, 永远不会再次被访问, 那么就可以删除这个对象.
垃圾收集的实现目前有两种思路, 跟踪和引用计数.
跟踪垃圾收集
跟踪的基本原理是从一系列永不会释放的原始对象出发, 跟踪直接和间接引用到的所有对象, 没有跟踪到的对象即没有被任何其他对象引用, 因而可以被删除.
标记-清除垃圾收集算法
引用计数垃圾收集
引用计数的基本原理是给每个对象维护一个引用计数, 当对象被引用时, 增加计数. 当引用取消时, 减少计数. 当计数减为零时, 对象即可被删除.
引用计数垃圾收集算法
参考:
-
https://zh.wikipedia.org/wiki/%E5%9E%83%E5%9C%BE%E5%9B%9E%E6%94%B6_(%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%B8)
-
https://en.wikipedia.org/wiki/Tracing_garbage_collection
-
http://www.math.grin.edu/~rebelsky/Courses/CS302/99S/Presentations/GC/
声明:本站部分文章内容及图片转载于互联 、内容不代表本站观点,如有内容涉及侵权,请您立即联系本站处理,非常感谢!