Why multiple garbage collectors in Java?
Form the article you've provided:
Typically some fraction of the surviving objects from the young generation are moved to the tenured generation during each minor collection. Eventually, the tenured generation will fill up and must be collected, resulting in a major collection, in which the entire heap is collected. Major collections usually last much longer than minor collections because a significantly larger number of objects are involved.
I am assuming they have overlapping pools.
This assumption is wrong. PS Scavenge will be used on the young (eden, survivor) generation and PS MarkSweep will be used on the old generation. The only "overlap" is that PS Scavenge will move objects into the old generation once they've been around a while and let PS MarkSweep deal with them then.
The benefit of having different garbage collectors for different pools is that an algorithm that works well for objects in the eden pool isn't necessarily going to work well for old generation objects.
This article covers the various options for different garbage collectors working together.
As far as "major" collections which occur when there is no space to move objects into the old generation, this (admittedly old) whitepaper from Sun says the following:
...the young generation collection algorithm is not run. Instead, the old generation collection algorithm is used on the entire heap.