And there's another interesting observation. In Morphic, the delay because of tenuring is much larger than in MVC. This is probably because Morphic creates much more short-lived object garbage.
Umm, 'splain again why tenuring would make Morphic feel slow?
If Morphic creates lots of short-lived objects, then much (most?) of those objects won't survive long enough to get tenured; besides, isn't tenuring only done every now and then, when incremental GC's get too long (too many survivors) or the root table gets full?
Thinking about this, could this be the reason, why Morphic always feels a little bit slower than MVC? If yes, then the best approach to speed up Morphic would be to reduce the number of temporary objects...
Creating lots of temporary objects will trigger lots more minor GC's which could make it run slower. However, there are several improvements to the collector that could improve this. Dynamically adjusting the allocation threshold (currently fixed at 4000) and tenuring policy could reduce the frequency of minor GC's, giving those short-lived objects more time to die while keeping minor GC duration below the 10ms threshold.
Looking at the collector, though, it looks like the reason for the 4000 object allocation threshold is because the relocation phase doesn't deal very well with the case where more than 2000 objects need to be relocated in a single minor collection, although this could be tweaked.