昨天在读一篇帮助:http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
是讲述Tomcat中,classLoader如何工作的。
其中一段是这样讲的:
引用
Therefore, from the perspective of a web application, class or resource loading looks in the following repositories, in this order:
Bootstrap classes of your JVM
System class loader classes (described above)
/WEB-INF/classes of your web application
/WEB-INF/lib/*.jar of your web application
$CATALINA_HOME/lib
$CATALINA_HOME/lib/*.jar
我的理解是,当Tomcat中的某个Web应用,需要请求某个class信息,或者是资源信息,将会按照以下的顺序进行查找。
JVM
Tomcat启动的关键类
应用中的classes目录下的class文件
应用中lib目录下的jar文件
Tomcat安装目录下的lib目录
Tomcat安装目录下的lib目录下的jar文件。
如果按照这样来看的话,应该会出现这样的情况,如果同一个Tomcat下有两个不同的web应用,这两个应用都在自己的lib目录下使用同样的第三方jar包。那么Tomcat会使用不同的Web应用级别的classLoader来加载这两个jar包。
这样就造成了Perm空间的浪费。
1 楼
maliang.scut
2010-03-15
这里看到另外一位同学的讲述,更好:
http://gotothework.iteye.com/blog/219299
http://gotothework.iteye.com/blog/219299
2 楼
maliang.scut
2010-03-15
一个新的疑问,我在Windows下查看某个web应用的lib目录,大小为12M,那么当这些jar文件都被完全加载后,他们在Perm中会占用多大的空间呢?