我正在使用 glassfish v2,但我在 tomcat 中遇到了同样的问题。
服务器启动后,我看到:
sudo jmap -histo:live 14127 | grep KVStore
6222: 1 24 xxx.xxx.KVStore
经过一段时间的使用,我得到:
sudo jmap -histo:live 14127 | grep KVStore
7240: 1 24 xxx.xxx.KVStore
7360: 1 24 xxx.xxx.KVStore
虽然我猜这与 glassfish 的扩展方式有关,但这确实是个问题,因为我将 KVStore 用作内存存储类。
它是一个带有静态哈希表和 getter 和 setter 的单例类:
class KVStore
public static KVStore kvstore;
public Hashtable hash;
现在的问题是,只有一类。当我调用 store 并使用一个 serverlet 时,我收到的对象就好了。但是,对于两个类或 KVStore,servlet 在两者之间交替,并且在连续进行调用时永远不会正确返回。
现在我真的需要将对象存储在内存中。如何强制此类仅加载一次?或者创建一个全局可访问的哈希表?
最后一件事,我正在部署一个 jruby warbled 战争文件。如果没有实际的方式发生这种情况,请告诉我,我会改为调查。