Лирика: программа с garbage collector-ом - что человек, которому иногда нужно поспать (а наши сны - это, по-видимому, фрагменты объектов, анализируемых нашим встроенным GC на предмет выкинуть/не выкинуть :).
Теория: как хороший работник не засыпает, не уведомив начальника попросив товарищей постоять на стрёме подменить, так и GC не должен начинать массивную сборку мусора, не уведомив о своих планах приложение, дабы то могло заранее перераспределить нагрузку. После этого иди и спи на здоровье.
Практика: ни в Java, ни в .Net сборщики мусора такой простой вещи почему-то не делают, зато очень изобретательно пытаются вычислить, как бы эдак незаметно покемарить, чтобы никто не заметил. Но не всегда удачно. Нездоровая фигня...