In Java, garbage collection virtually always involves figuring out ways to delay compaction. This can be managed for a while on younger objects, as they tend to not live very long, but eventually old dead objects will need to be reclaimed.
Garbage collection can be delayed for a while longer by using the memory freed through old object removal tracking, but eventually even this space will fragment and will need to be reclaimed. In conclusion, garbage collection can be put on hold for some time, but not indefinitely.
Virtually all garbage collection strategies therefore at some point involve the halting of application processing to note which objects are still being used. These objects are then gathered, with the heap being de-fragmented and compacted. Large heaps lead to longer pause times, resulting in poor application performance and noticeable delays for users.
There is a way for JVM garbage collection to be eliminated however - find out how by downloading this white paper.