为什么使用“垃圾”回收,主要有如下四大功能:
一、避免常见的内存管理错误
无用单元:不能被访问,但还没有释放。将永远无法被释放(内存泄露)。
悬垂引用:还能被访问,却已经被回收。程序崩溃、未定义行为。
二、责任分离
程序员集中注意力于业务逻辑,而不是内存管理。
三、提高性能
基于bump-pointer的分配回收算法比C语言的基于free-list的malloc和free更快。
有编译器的配合,生成快速路径
四、对并发、多核的硬件资源有利
即使应用程序是单线程的,也可以有多个GC线程帮助它管理内存。
利用异构CPU,将GC线程放在小核上,可以减少能耗。
一些并发无锁数据结构在有垃圾回收的情况下实现更容易。
1. Michael-Scott lock-free queue
2. Read-copy-update (RCU)