The garbage collection implementation is key to the superior performance of the IBM Java Virtual Machine (JVM). While most other JVMs need a lot of tweaking to provide optimal performance, IBM JVMs are designed to work well in most scenarios with their "out of the box" settings. In certain situations, however, garbage collection performance nosedives for no apparent reason. The effects can be an unresponsive server, a frozen screen, or a complete failure, often with cryptic messages such as "Totally out of heap space." Luckily, in almost all such situations, the cause is easy to locate and usually quite easy to correct.
This article shows how to locate potential causes of performance degradation. Since garbage collection is such a vast and complex topic, this article builds on an excellent set of articles already published (see [link|http://www-106.ibm.com/developerworks/ibm/library/i-gctroub/#resources|Resources]).Though most of the suggestions discussed in this article treat your Java program as a black-box, there also are some ideas that you can put in use while designing or coding to avoid potential problems altogether.
It used to be that Sun's JVM GC algorithms were pretty bad. I think they and others have improved them in subsequent JVM implementations. It sounds like he's drunk too much of MS's Koolade.