I am using glassfish v2 but I've had the same problem in tomcat.
Once the server starts, I see:
sudo jmap -histo:live 14127 | grep KVStore
6222: 1 24 xxx.xxx.KVStore
After a while of usage, I get:
sudo jmap -histo:live 14127 | grep KVStore
7240: 1 24 xxx.xxx.KVStore
7360: 1 24 xxx.xxx.KVStore
While I'm guessing this has something to do with how glassfish scales out, this is really problematic because I use the KVStore as an in memory storage class.
It is a singleton class with a static hashtable and getters and setters:
class KVStore
public static KVStore kvstore;
public Hashtable hash;
Now the problem, is that with one class. When I call store and get with a servelet I receive the object just fine. But, with two classes or KVStore, the servelet alternates between the two and never returns correctly when the calls are made consecutively.
Now I really need to store the object in memory. How do I force this class to be loaded only once? Or create a Globally accessable hashtable?
One last thing, I am deploying a jruby warbled war file. If there is no actual way this could be happening, let me know and I'll look into that instead.
So this is not a complete answer because I still have bugs:
https://stackoverflow.com/questions/5785531/jruby-typeerror-assigning-non-exception-to
But using jmap I have made a single singleton.
How to create a true singleton in java?
specifically:
http://surguy.net/articles/communication-across-classloaders.xml
which is a hack.
Ok, fml. Most likely you want this:
in your warble.rb and call it good.