当JSP执行完毕时会发生什么?

3
当JSP执行完成时,是否会对在JSP页面中声明的所有变量进行垃圾回收?如果我在JSP中声明了许多占用内存的Hashtable,并且在JSP执行完成之前没有将变量设置为null,那么即使JSP执行完成后,对象是否仍然留在内存中?
(我没有将它们存储在持久变量中,例如session。只是在本地变量中。)
3个回答

3
如果变量在请求或页面范围内声明,则它们是可进行垃圾回收的。
即使将对象引用设置为null,它仍然会消耗内存,只有引用计数减少1。如果引用计数为0,则垃圾回收器将释放内存。

2
Java不使用引用计数垃圾回收机制。 - jrockway

0

当JSP页面的作用域未设置为会话时,JSP引擎在执行完成后会将其从内存中移除。然而,为了避免内存泄漏,您应该使用jspDestroy()方法释放内存。


0

如果您想准确了解 JSP 翻译成 Java 逻辑代码的内容,可以使用 Jasper 生成代码。(不同的 JSP 引擎可能会生成不同的输出,但变量范围等应符合规范。)您需要 TomcatAnt

此示例批处理脚本将 test.jsp 的 Java 代码生成到 output 目录中:

@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET ANT_HOME=C:\dev\apache-ant-1.7.1
SET TOMCAT_HOME=C:\Program Files\Apache Software Foundation\Tomcat 6.0
SET CLASSPATH="
FOR /r "%TOMCAT_HOME%\bin\" %%a IN (*.jar) DO SET CLASSPATH=!CLASSPATH!;%%a
FOR /r "%TOMCAT_HOME%\lib\" %%a IN (*.jar) DO SET CLASSPATH=!CLASSPATH!;%%a
SET CLASSPATH=!CLASSPATH!;%ANT_HOME%\lib\ant.jar"
MKDIR output
java org.apache.jasper.JspC -d .\output -webapp .\WebContent test.jsp

WebContent 是 Web 应用程序的根目录。生成的代码是一个 Servlet,将按照规范中定义的 Servlet 生命周期进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接