首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Tomcat下的URLClassLoader慢速

Tomcat下的URLClassLoader慢速
EN

Stack Overflow用户
提问于 2013-07-30 13:35:13
回答 2查看 1.3K关注 0票数 1

我有一个包含大约30个罐子的类路径目录。在我的普通控制台应用程序中,我正在创建一个URLClassLoader,其中我使用指向所有这些jars的URL列表初始化它。

代码语言:javascript
复制
URL[] urls = new URL[] {
    new URL("jar:file:/D:/Work/temp/jars/antlr-2.7.7.jar!/"),
    new URL("jar:file:/D:/Work/temp/jars/aopalliance-1.0.jar!/"),
    new URL("jar:file:/D:/Work/temp/jars/c3p0-0.9.1.jar!/"),
    ...
}
URLClassLoader cl = new URLClassLoader(urls, getClass().getClassLoader());
Class<?> c = cl.loadClass(...);
etc...

就像这样,一切都正常,从我的URLClassLoader加载单个类需要几毫秒时间。

现在,我使用这段代码并使其在Tomcat下运行,例如,在servlet的doGet()中触发一个简单的web请求。令人惊讶的是,加载一个平均类所需的时间间隔会增加10-15倍,这使得整个初始化时间无法接受。这个问题至少适用于Tomcat版本6和7。

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-02 13:18:59

这是绝对愚蠢的,但是在我重新启动我的机器之后,这个问题就消失了:)我运行的是Windows 7,Oracle JDK 1.6/1.7,Tomcat 6/7,这些问题的任何组合都会持续存在。分析器向我展示的是sun.net.www.protocol.jar.URLJarFile<init>减缓了整个过程,可能是jar缓存出了问题,因此对从jar请求的每个类执行不必要的初始化。

更新:,我发现了如何解决类加载太慢、甚至更慢的问题,只要您不重新启动计算机。而不是使用

代码语言:javascript
复制
new URL("jar:file:/D:/Work/temp/jars/antlr-2.7.7.jar!/")

我试过了

代码语言:javascript
复制
new URL("file:/D:/Work/temp/jars/antlr-2.7.7.jar")

即使没有指定"jar“协议,URLClassloader也会将这种URL正确地作为jar处理。然而,它大大提高了性能!但我还是不知道这种行为的确切原因。

票数 0
EN

Stack Overflow用户

发布于 2013-08-01 06:20:50

试试new URLClassLoader(urls);。这能提高性能吗?

公共类加载器和WebappX类加载器可能会影响加载类的性能。有关Tomcat类装载机的更多细节,请参见下面的链接。

http://tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17948577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档