We had a heap dump last time I have used eclipse memory analyzer to run the memory leak report.
Problem Suspect 1:
The class "java.lang.ref.Finalizer", loaded by "<system class loader>", occupies 513,563,960 (71.85%) bytes.
Keywords
java.lang.ref.Finalizer
Problem Suspect 2:
17 instances of "org.apache.naming.resources.ResourceCache", loaded by "org.jboss.mx.loading.UnifiedClassLoader3 @ 0x38c14950" occupy 89,613,888 (12.54%) bytes.
I would hunt through your code for finalizers. Seems like there are way too many objects that require finalization and such objects cannot be cleaned up during the first gc after they die, and they will hang around in the heap until the gc after their finalization methods have run. And from what I recall, finalization is single-threaded.
Google "java.lang.ref.Finalizer", you will find lots of informative reading.