垃圾回收机制:

但是计算reachablity很大程度是一种Approximation, 因为总会有一些奇怪的case

Mark & Sweep:
Mark = 找到所有reachable objects 标记一下。
sweep: collects garbage objects.

Mark & Sweep会导致 Fragmentation. 因为Mark 来Mark取的, 不要的就直接删掉。

Stop And Copy:


Best:


对于C, C++, 很难找到所有的reachable objects 而且你很难move objects. 因为如果有指针指向object, 指针里存的地址也得改。

Conservative Theory:

Reference Counting: worst
一个是因为速度慢,一个是因为它无法发现cycle


这里就有一个unreachable self-loops. 由于object之间各自的count都不是0,所以不会被清理!

就算有垃圾回收机制,还是可能内存泄露。
因为有时候很难知道这个Data Structure到底要不要。
所以比较好的做法是, 不用的时候programmer自己手动设置为Null.
这样编译器就知道,ok,这个不用了。

网友评论