返回

分代模式的一个问题是当进入主收集周期,必须做一次完整的标记清除,这和 Lua 5.0 的全量 GC 是一样的,这会带来停顿问题。只不过分代 GC 模式下,全量 GC 频率可以降的非常低,因为大量临时内存都通过次级收集周期清理掉了,内存并不会增长太快。当遇到必须消除停顿的环境,我们可以手工精确调整:发现内存持续增长,不要主动触发完整的主收集周期,而是主动切换到步进模式,然后周期性的调用 gc step (不等内存分配器来触发)在合理的时间内分布报完一个完整的 GC 周期,再切换回分代模式。@Cloud 在合理的时间内分布报完一个完整的 GC 周期,再切换回分代模式。 此处有个问题,lua版本5.4.2 gc step做完完整的收集后,如果此时内存比较大比如还剩3,4个g,此时切换回分代会触发分代的fullgc,这个时候也会造成阻断吧?

名字: 自动排版 密码:

回复 | (3156) | | 2021-01-16 06:50:54