[英]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,我已经做成了一个单例。
特别:
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.