0

我正在使用 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 的扩展方式有关,但这确实是个问题,因为我将 K​​VStore 用作内存存储类。

它是一个带有静态哈希表和 getter 和 setter 的单例类:

class KVStore
    public static KVStore kvstore;
    public Hashtable hash;

现在的问题是,只有一类。当我调用 store 并使用一个 serverlet 时,我收到的对象就好了。但是,对于两个类或 KVStore,servlet 在两者之间交替,并且在连续进行调用时永远不会正确返回。

现在我真的需要将对象存储在内存中。如何强制此类仅加载一次?或者创建一个全局可访问的哈希表?

最后一件事,我正在部署一个 jruby warbled 战争文件。如果没有实际的方式发生这种情况,请告诉我,我会改为调查。

4

2 回答 2

0

好的,fml。你很可能想要这个:

config.webxml.jruby.min.runtimes = 1
config.webxml.jruby.max.runtimes = 1

在你的 warble.rb 中并称之为好。

于 2011-04-26T22:28:07.437 回答
0

所以这不是一个完整的答案,因为我仍然有错误:

https://stackoverflow.com/questions/5785531/jruby-typeerror-assigning-non-exception-to

但是使用 jmap 我做了一个单例。

如何在java中创建一个真正的单例?

具体来说:

http://surguy.net/articles/communication-across-classloaders.xml

这是一个黑客。

于 2011-04-26T03:24:49.647 回答