繁体   English   中英

glassfish / tomcat Java Server加载类一次

[英]glassfish/tomcat Java Server load class once

我正在使用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并拿到发球时,我收到的对象就很好了。 但是,对于两个类或KVStore,当连续调用时,servelet在两个类之间交替出现,并且永远不会正确返回。

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

最后一件事,我正在部署一个jruby混乱的战争文件。 如果没有实际的方式可能发生这种情况,请告诉我,我将进行调查。

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

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

但是使用jmap,我已经做成了一个单例。

如何在Java中创建真正的单例?

特别:

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

这是一个hack。

好的,fml。 您最有可能想要这样:

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

在您的warble.rb中,并称之为良好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM