Что происходит, когда JSP завершает выполнение?

После завершения выполнения JSP все переменные, объявленные на странице JSP, будут отправлены на сборку мусора? Если я объявлю несколько хэш-таблиц с интенсивным использованием памяти в JSP и позволю JSP завершить выполнение без предварительной установки переменных в null, останется ли объект в памяти даже после завершения выполнения JSP?

(Я не храню их в постоянной переменной, такой как сеанс. Просто в локальной переменной.)


person futureelite7    schedule 19.03.2009    source источник


Ответы (3)


Если переменные объявлены в области запроса или страницы, да, они подходят для сборки мусора.

Даже если вы установите для ссылки на объект значение null, она по-прежнему потребляет память, только счетчик ссылок уменьшается на 1. Если счетчик ссылок равен 0, сборщик мусора освободит память.

person Kees de Kooter    schedule 19.03.2009
comment
Java не использует сборщик мусора. - person jrockway; 29.07.2009

Что ж, механизм JSP удаляет страницу JSP из памяти после завершения выполнения (если область действия не установлена ​​на сеанс). Однако, чтобы избежать утечки памяти, вы должны использовать метод jspDestroy () для освобождения памяти.

person Björn    schedule 19.03.2009

Если вы хотите узнать, в какой именно код логики Java преобразуется JSP, вы можете использовать Jasper для генерации кода. (Различные механизмы JSP, вероятно, будут генерировать разные выходные данные, но объем переменных и т. Д. Должен соответствовать спецификации.) Вам понадобится Tomcat и Ant.

Этот пример пакетного сценария генерирует Java-код для test.jsp в каталоге 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 - корневой каталог веб-приложения. Сгенерированный код является сервлетом и будет следовать жизненному циклу сервлета, как определено в спецификации.

person McDowell    schedule 19.03.2009