Compaction means moving objects in RAM
so that objects become contiguous in RAM.
There are some cases when you will get
out of memory error without any memory leak . And there may be memory available
but there is no place for new object because of no contiguous availability of memory. The algorithmic
difficulty in a compaction algorithm is about updating all pointers, so that
they point to the new object location. GC works preferentially with young
objects only. Here, this means compacting only the end of the heap. full
compaction being applied rarely. .Lets see with an example :-
The point here is that a full compaction, could induce a noticeable pause. Generational GC tries to make such pauses rarer . In GC pause all threads of your application will be suspended