- 主动回收
- 主动清空内存,如Python的del操作。
2. 被动回收 - 系统自动回收,如Java的垃圾收集器。
3. 引用计数 - 每个对象记录引用数,当引用数为0时回收。
4. 标记清除 - 遍历所有对象,标记为可达的,不可达的回收。
5. 分代回收 - 根据对象存活时间分为新生代和老年代。
6. 增量回收 - 分时进行回收,减少对系统性能的影响。
我自己也还在验证,但经验是这样。
- 主动清空内存,如Python的del操作。
垃圾回收主要分为两类:自动垃圾回收和手动垃圾回收。其实很简单,这事复杂在很多人搞不清它们的区别。
先说最重要的,自动垃圾回收是现代编程语言中常见的一种机制,比如Java和C#等。它通过自动追踪对象的引用,来判断对象是否被使用,未被使用的对象就会被回收。去年我们跑的那个项目,大概3000量级,使用Java时,自动垃圾回收大大减少了开发人员的负担。
另外一点,手动垃圾回收则是在如C++这样的语言中常见,开发者需要显式地释放不再使用的资源。我记得有一次,我在处理一个老旧的系统时,发现如果不手动释放内存,程序运行一段时间后就会变得非常卡顿。
我一开始也以为自动垃圾回收就能解决所有问题,后来发现不对,手动垃圾回收在某些情况下还是很有必要的。等等,还有个事,比如在嵌入式系统中,内存资源有限,手动管理内存可以更加精细。
最后提醒一个容易踩的坑,就是过度依赖自动垃圾回收,可能会导致内存泄漏,因为垃圾回收器并不能总是准确判断对象的生命周期。所以,在设计和开发时,了解不同垃圾回收机制的特点和适用场景非常重要。