This one says:
These pauses are the result of the inevitable requirement for a compact pile to make room. Collectors use different strategies to delay these events, but compaction is inevitable for all commercial collectors available.
I got the impression that if you keep the memory size of your application constant, then there is no need to compress the GC, in other words, this will happen only if you continue to add and collect objects. If you have a large enough pile with enough free space, why would you ever need to squeeze when you do not create any holes (i.e. do not generate garbage)?
I understand that maintaining a constant amount of memory for a Java application is not easy, but it is possible with the right profiling, bootstrap, and discipline tools.
So, is it not reasonable to assume that a Java application can work with permanent memory without any delays embedded in the GC, in other words, without GC pauses?
EDIT: By persistent memory, I mean steady state , as Ajay George mentioned, when no more objects are created or not mentioned. If you continue to create objects, you will end up running out of memory, and if you continue to delete objects, you will eventually call GC. Thus, the ultimate goal is to start, warm up, force fill the GC, and then transition to a steady state for production time.
source share