title: When is a Full GC triggered?
body: <p>As per my understanding:</p>
  <p><strong>Minor GC</strong></p>
  <p>a GC that happens in the young gen is usually called Minor because it takes <strong>less</strong> time to complete as the live-set will be usually small (i'm talking about typical java application considering the weak generational hypothesis) and a copying collector with less number of objects to relocate and remap.</p>
  <p><strong>Major GC</strong></p>
  <p>a GC that occurs in the old gen is usually called Major GC because it takes <strong>more</strong> time to complete as live-set will be mostly big (compared to young gen) and it usually compacts the old gen and the time for compaction increases linearly with the old generation size.</p>
  <p>Unfortunately the GC logs report the old generation collection as Full GC while it's only the Old generation that's being collected. But in java memory management white paper there's a notion of Full GC in which the entire heap is collected.</p>
  <pre><code>A Full GC will be triggered whenever the heap fills up. In such a case the 
  young generation is collected first followed by the old generation. If the 
  old generation is too full to accept the content of the young generation,
  the young generation GC is omitted and the old generation GC is used to 
  collect the full heap, either in parallel or serial. Either way the whole 
  heap is collected with a stop-the-world event.
  </code></pre>
  <p>If there's always a Minor GC when the young gen fills up and if there's always a Major GC when the old gen fills up, when will this so called Full GC happen? How come the heap becomes full if both the young gen and old gen collectors are doing their part?</p>