<p>I recently began profiling an osgi java application that I am writing using VisualVM.  One thing I have noticed is that when the application starts sending data to a client (over JMS), the number of loaded classes starts increasing at a steady rate.  The Heap size and the PermGen size remains constant, however.  The number of classes never falls, even after it stops sending data. Is this a memory leak?  I think it is, because the loaded classes have to be stored somewhere, however the heap and permgen never increase even after I run the application for several hours.</p>

<p>For the screenshot of my profiling application go <a href="http://sites.google.com/site/javaperformacescreenshot/Home/profile.png" rel="noreferrer">here</a></p>

Yes, it's usually a memory leak (since we don't really deal with memory directly, it's more of a class instance leak).  I've gone through this process before and usually it's some listener added to an old toolkit that didn't remove it self.
In older code, A listener relationship causes the "listener" object to remain around.  I'd look at older toolkits or ones that haven't been through many revs.  Any long-existing library running on a later JDK would know about reference objects which removes the requirement for "Remove Listener".
Also, call dispose on your windows if you recreate them each time.  I don't think they ever go away if you don't (Actually there is also a dispose on close setting).
Don't worry about Swing or JDK listeners, they should all use references so you should be okay.