用于JSP的Tomcat类重载

时间:2012-06-07 14:45:12

标签: java tomcat classloader dynamic-class-loaders

重新加载JSP时,类重装如何在Tomcat中工作(我在谈论内部架构)?

我知道每个JSP都被编译为Java类。但是,如果类加载器不允许类卸载并且没有收集太多垃圾,那么类加载器(每个Web应用程序是唯一的)如何重新加载这些生成的类?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

JasperLoader实例是类加载器加载jsp生成的servlet。

jsp编译器"扔掉" (设置为null)旧的JasperLoader实例在生成较新的servlet类文件时。

引用JspServletWrapper.setServletLastModifiedTime中的评论:

  

真的需要卸载旧班级,但不能这样做。做    抛出JspLoader的下一个最好的事情就是这样    将创建一个新的加载器,它将加载新的加载器    类。

另见where this method is called after compiling

答案 2 :(得分:0)

标准Java类加载器永远不会卸载类。 Tomcat有自己的类加载器,它可以用新实例替换类的旧实例,然后孤立旧实例,使其以通常的方式提供给垃圾收集器。

在某些地方,我读到如果某个类在某段时间内没有使用,Tomcat将卸载它。但我现在找不到任何参考。