Short answer
A Full GC collects the entire heap (young + old + often Metaspace) and is usually the most expensive pause.
Explanation
Common triggers: the old generation filling up (promotion failure or an allocation that cannot be satisfied), Metaspace exhaustion, an explicit System.gc() call, and in G1 a concurrent-cycle failure that degrades to a full collection. Heap fragmentation and undersized heaps make them frequent. Frequent or long Full GCs are a red flag for leaks or misconfigured sizing.
Common mistakes
- Saying System.gc() always triggers a full GC.
- Not mentioning old-generation exhaustion and Metaspace.