"Once you have twice as much RAM as your working set, then gc is
competitive with manual memory allocation. If you have less
performance falls off a cliff -- 60x slowdowns -- because tracing
interacts pessimally with the LRU algorithm that kernels use to
determine which pages to swap to disk. Basically, your gc roots are the
hottest data in the program, and since you begin tracing there, LRU
means the kernel will put your root set onto disk."