2009-03-19 8 views
3

JSPが実行を終了すると、JSPページで宣言されたすべての変数がガベージコレクションの対象になりますか? JSPで多数のメモリを消費するHashtableを宣言し、あらかじめ変数をnullに設定せずにJSPで実行を終了させると、JSPの実行が終了してもオブジェクトはメモリに残りますか?JSPの実行が終了するとどうなりますか?

(私は、このようなセッションとして、永続的な変数に格納おりません。ただ、ローカル変数に。)

答えて

3

変数は、要求またはページスコープで宣言されている場合は、そう、彼らはガベージコレクションの対象となります。

nullにオブジェクト参照を設定しても、まだメモリを消費していますが、参照カウントだけが1減少します。参照カウントが0の場合、ガベージコレクタはメモリを解放します。

+2

Javaはrefcounting GCを使用しません。 – jrockway

0

JSPエンジンは、実行が終了すると(スコープがセッションに設定されていない場合)、JSPページをメモリから削除します。しかし、メモリリークを避けるためには、jspDestroy()メソッドを使用してメモリを解放する必要があります。

0

JSPが変換するJavaロジックコードを正確に知りたい場合は、Jasperを使用してコードを生成できます。 (異なるJSPエンジンは異なる出力を生成する可能性が高いですが、変数の範囲などは仕様に準拠する必要があります)TomcatおよびAntが必要です。

このサンプルバッチスクリプトは出力ディレクトリになtest.jspのためのJavaコードを生成します。

@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アプリケーションのルートディレクトリです。生成されたコードはサーブレットであり、仕様で定義されているサーブレットのライフサイクルに従います。

関連する問題