My understanding is that the JVM specification only defines the behavior of a garbage collector, but does not provide implementation details. This means it is up to the JVM implementation to build the garbage collector out.
There appears to be 3rd party garbage collectors such as the Azul Pauseless GC. To me, this implies that my JVM implementation, say HotSpot or JRockit, is configured by default to use its own built-in garbage collector. But, perhaps through configuration, I could use a 3rd party garbage collector (such as the one by Azul, or another).
So I ask: How does one "swap out" the built-in garbage collector with another one? If the answer is JVM implementation-specific, let's assume HotSpot.