A G1 GC log shows a run of mixed collections that stop keeping up, followed by a line tagged `(Evacuation Failure)`, followed shortly by a `Pause Full` that takes over half a second. What does each of these three events actually mean, in order, and what's the one thing you'd change first?
Read left to right, this is G1's incremental cleanup falling behind, then genuinely failing, then falling back to the expensive last resort. Mixed collections are G1's normal way of cleaning the old generation a little at a time alongside young collections; when they stop keeping up, live data is accumulating in the old generation faster than the incremental approach can reclaim it. An evacuation failure means G1 tried to copy live objects out of a region during a collection and ran out of free regions to copy them into — the heap is too full to collect incrementally at all. The full compaction that follows is the fallback: the entire heap gets compacted in one stop-the-world pause, which is exactly the multi-hundred-millisecond pause the log shows. The lesson's own reading of this exact sequence is that it's the most common G1 story in production, and the cause is almost always not enough headroom above the live data — the fix isn't a collector flag, it's sizing the heap with real room above what's actually live.