Ok, after using GCSetMode 5, this is the first 10 lines printed
As you can see, there are several times objsFreed was over 500. let's step through it.
After that, objsFreed seems to settle down and is either 499, 500, or 501 each time, keeping rate at around 500 every GCCollect.
GC collectMem: memFreed=1198, time=0ms, objsFreed=29, objsScanned=121, objsLive=34 GC collectMem: memFreed=16932, time=0ms, objsFreed=423, objsScanned=64, objsLive=2 GC collectMem: memFreed=30342, time=0ms, objsFreed=957, objsScanned=64, objsLive=2 GC collectMem: memFreed=16830, time=0ms, objsFreed=574, objsScanned=73, objsLive=11 GC collectMem: memFreed=14716, time=0ms, objsFreed=517, objsScanned=73, objsLive=12 GC collectMem: memFreed=14332, time=0ms, objsFreed=492, objsScanned=41, objsLive=4 GC collectMem: memFreed=14146, time=0ms, objsFreed=492, objsScanned=43, objsLive=4 GC collectMem: memFreed=14936, time=0ms, objsFreed=512, objsScanned=41, objsLive=4 GC collectMem: memFreed=14664, time=0ms, objsFreed=504, objsScanned=37, objsLive=1 GC collectMem: memFreed=14244, time=0ms, objsFreed=499, objsScanned=43, objsLive=4
As you can see, there are several times objsFreed was over 500. let's step through it.
rate = 500 rate :+ 500 - 29 = 971 rate :+ 500 - 423 = 1048 rate :+ 500 - 957 = 591 rate :+ 500 - 574 = 517 rate :+ 500 - 517 = 500 rate :+ 500 - 492 = 508 rate :+ 500 - 492 = 516 rate :+ 500 - 512 = 504 rate :+ 500 - 504 = 500 rate :+ 500 - 499 = 501
After that, objsFreed seems to settle down and is either 499, 500, or 501 each time, keeping rate at around 500 every GCCollect.