Skip to content

2.5.1 - 步进GC(Incremental Garbage Collection)

在步进模式中,每个GC循环都是一小步一小步地与程序一起交错执行标记-扫描清理。这个模式下的收集器使用三个数字来控制GC循环:GC停步(garbage-collector pause)GC步进乘数(garbage-collector step multiplier),以及GC步数(garbage-collector step size)

GC停步用以控制什么时候收集器才开始一个新的GC循环。收集器会在使用了上次GC时n%的内存后开始新一轮的GC。其值越大则收集器的影响越小。值小于等于100意味着收集器将不会等待而直接开始新一轮循环。值为200则意味着收集器将在只用之前整整两倍内存后才开始一轮新的循环。其默认值是100,最大为1000。

GC步进乘数用以控制相对于内存分配的收集速度,即每分配1KB的内存就标记并扫描多少个元素。值越大则收集器的影响越大,但也会增加步进的大小。你不应当使用小于100的值,因为这会使得收集器太慢以至于收集器永远无法完成一个循环。其默认值是100,最大为1000。

GC步数用以控制每次步进的的大小,具体说来就是在步进执行之前解释可分配的内存数量。这是个对数参数:其值为n表示解释器会在步进之间分配2n字节并在步进时做相同大小的清理工作。较大的值(例如60)会使收集器变为一个“世界暂停(stop-the-world)”的(即,非步进的)收集器。其默认值为13,意味着步长约为8KB左右。