為什么使用“垃圾”回收,主要有如下四大功能:
一、避免常見的內(nèi)存管理錯誤
無用單元:不能被訪問,但還沒有釋放。將永遠無法被釋放(內(nèi)存泄露)。
懸垂引用:還能被訪問,卻已經(jīng)被回收。程序崩潰、未定義行為。
二、責任分離
程序員集中注意力于業(yè)務邏輯,而不是內(nèi)存管理。
三、提高性能
基于bump-pointer的分配回收算法比C語言的基于free-list的malloc和free更快。
有編譯器的配合,生成快速路徑
四、對并發(fā)、多核的硬件資源有利
即使應用程序是單線程的,也可以有多個GC線程幫助它管理內(nèi)存。
利用異構(gòu)CPU,將GC線程放在小核上,可以減少能耗。
一些并發(fā)無鎖數(shù)據(jù)結(jié)構(gòu)在有垃圾回收的情況下實現(xiàn)更容易。
1. Michael-Scott lock-free queue
2. Read-copy-update (RCU)