Most of the time, JVM garbage collection means finding ways to delay compaction. For a while this can be performed on younger objects, because most objects have a short time span, but at a certain point in time old dead objects will need to be reclaimed.
Garbage collection can be held off for a little longer by tracking the removal of old objects and using memory freed that way. But eventually this space will also become fragmented and will need to be reclaimed. Conclusion: garbage collection can be stopped for a while, but not forever.
Therefore most GC systems need to stop application processing at some point to learn which objects are still being deployed. These can then be collected, and the heap can be defragmented and compacted. Bigger heaps cause longer pause times, leading to noticeable delays for users and poor application performance.
Garbage collection and the requirement for GC tuning can be completely eliminated however - learn how by downloading this white paper.