In this paper, we describe a novel execution environment that can dynamicallyswitch between garbage collection (GC) systems. As such,it enables application-specific GC selection. In addition,the system can switch between different GC systems whilethe program is executing.Our system is novel in that it is able to switch betweena wide range of diverse collection systems. To empirically evaluateour system, we implemented annotation-guided GC selection andwe show its efficacy for a wide range of benchmarks andheap sizes. In addition, we implemented a simple heuristic thatautomatically identifies when to switch collectors when programexecution behavior warrants it. Oursystem introduces an average overhead of 4% forboth annotation-guided andautomatic switching. Perhaps more importantly however, wesignificantly improve performance over selecting the wrongcollection system (by 19% using annotation-guided selectionand by 16% using automatic switching, on average).