Source code
Revision control
Copy as Markdown
Other Tools
// Exercise incremental compacting GC↩
// Run with MOZ_GCTIMER to see the timings↩
↩
gczeal(0);↩
↩
function testCompacting(zoneCount, objectCount, sliceCount)↩
{↩
// Allocate objectCount objects in zoneCount zones↩
// On linux64 debug builds we will move them all↩
// Run compacting GC with multiple slices↩
↩
var zones = [];↩
for (var i = 0; i < zoneCount; i++) {↩
var zone = newGlobal();↩
evaluate("var objects; " +↩
"function makeObjectGraph(objectCount) { " +↩
" objects = []; " +↩
" for (var i = 0; i < objectCount; i++) " +↩
" objects.push({ serial: i }); " +↩
"}",↩
{ global: zone });↩
zone.makeObjectGraph(objectCount);↩
zones.push(zone);↩
}↩
↩
// Finish any alloc-triggered incremental GC↩
if (gcstate() !== "NotActive")↩
gc();↩
↩
startgc(sliceCount, "shrinking");↩
while (gcstate() !== "NotActive") {↩
gcslice(sliceCount);↩
}↩
↩
return zones;↩
}↩
↩
testCompacting(1, 100000, 100000);↩
testCompacting(2, 100000, 100000);↩
testCompacting(4, 50000, 100000);↩
testCompacting(2, 100000, 50000);↩