Что происходит, когда JSP заканчивает выполнение? - PullRequest
3 голосов
/ 19 марта 2009

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

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

Ответы [ 3 ]

3 голосов
/ 19 марта 2009

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

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

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

0 голосов
/ 19 марта 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...