Change MarkSweepCollector to a thread-local singleton