🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
比如垃圾回收的问题,你就假设自己要打扫房子,但房子里还有人活动,再不断制造垃圾,你怎么打扫? 最简单粗暴的办法就是把人赶出去,打扫完了再进来。这就是所谓的 stop world 模式。如果你打扫的足够快,这种办法其实也可以用。 那如果房间比较大,垃圾比较多,这种办法不可接受怎么办?你发现打扫卫生的时候时间耗费在判断一个东西是不是垃圾上了。于是你想了个办法,先把每个垃圾都打上标记,标记完了再 stop world,快速清理。这就是所谓的 Mark-Sweep。 那如果垃圾和有用的东西混杂在一起,即使清理完屋里也乱糟糟的怎么办?那就顺便整理下呗。先腾出一块空间,把有用的东西搬到那边整理好。其他的垃圾清理掉。这就是所谓的 Copying 整理算法。 那如果空间本来就小,弄一块空的空间不容易呢?那就把上面两个办法结合下呗,一遍标记一遍整理。就是所谓的 Mark-Compact 算法。 再后面的优化就是能不能分成不同的区域用不同的算法(分代)?如果你再请几个帮手来一起打扫会如何进行(并发)?虽然越来越复杂,但理解了前面的问题,它的优化点也就容易理解。