к примеру - если выделять память небольшими кусками, то будет некуда складывать большие непрерывные объекты. а если выделять большими - то не получится возвращать из по частям :)
Разве что в случае раста быстрее происходит вызов free, и следующий malloc может переиспользовать память, а в gc получается все малоки будуть идти с новых блоков памяти пока gc не запустится. Зис ис ризонабл
слишком часто тоже не надо, а то cpu будет жрать, я в своей апишке поставил GC.collect раз в 5 секунд, и процессы которые живут месяцами отъедаются только на 100-200 мб, а без этого было намного больше