The best way to see what the GC is doing is to set one of the GC logging options: -verbose:gc, -XX:+PrintGCDetails or -XX:+PrintHeapAtGC. Plotting the data returned by those options should give you a better idea of that is really happening.
I often speak on this topic, and actually found one of my presentations online at http://www.cecmg.de/doc/tagung_2007/agenda07/fileadmin/trilog/download/cecmg_2007/Referenten/Tag2/2B3_Johnson_JavaPerfI.pdf. Hope it helps. I have other resources available, but they all cost money.