浏览 3155 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-12-07
其实这个问题在windows的JDK中似乎就有问题。就是使用URLClassLoader读取一个jar文件中的class,那么,这个jar文件会被锁定,这个进程结束前,是不能被删除的。特别是使用getResourceAsStream方法,一旦使用,即使使用System.gc()也没有用。另外,使用System.gc()太占资源了。 但是,如果是用.war文件部署的,删除.war包,那么对应的文件夹就会被删除。这个是怎么做到的?因为classloader本身没有提供stop或者remove class的方法。 tomcat的源代码中WebAppClassLoader中有stop方法,似乎可以释放jar文件。但是还没有仔细研究。 如果在context.xml中置顶anti-locking为true,那么lib/*.jar是可以被删除的。因为tomcat将这些文件的副本拷贝到了临时文件目录。这样只是锁定了副本。原有文件是可以被删除的。 以上是粗浅见解,那面有错。欢迎交流。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |