重新加载JSP时,类重装如何在Tomcat中工作(我在谈论内部架构)?
我知道每个JSP都被编译为Java类。但是,如果类加载器不允许类卸载并且没有收集太多垃圾,那么类加载器(每个Web应用程序是唯一的)如何重新加载这些生成的类?
答案 0 :(得分:1)
如果您想接受教育,请阅读代码。
答案 1 :(得分:1)
JasperLoader实例是类加载器加载jsp生成的servlet。
jsp编译器"扔掉" (设置为null)旧的JasperLoader实例在生成较新的servlet类文件时。
引用JspServletWrapper.setServletLastModifiedTime中的评论:
真的需要卸载旧班级,但不能这样做。做 抛出JspLoader的下一个最好的事情就是这样 将创建一个新的加载器,它将加载新的加载器 类。
答案 2 :(得分:0)
标准Java类加载器永远不会卸载类。 Tomcat有自己的类加载器,它可以用新实例替换类的旧实例,然后孤立旧实例,使其以通常的方式提供给垃圾收集器。
在某些地方,我读到如果某个类在某段时间内没有使用,Tomcat将卸载它。但我现在找不到任何参考。