明らかに、ある時点でオブジェクトが作成され、破棄/プールに戻されます。これらがどのようにガベージコレクションされるかに特に興味があります。この動作を制御する方法はありますか?具体的には、invalidate()
これらのオブジェクトを収集対象としてマークするための呼び出しはありますか?保存されている参照はいつリリースされますか?
詳細が多いほど良いです。
明らかに、ある時点でオブジェクトが作成され、破棄/プールに戻されます。これらがどのようにガベージコレクションされるかに特に興味があります。この動作を制御する方法はありますか?具体的には、invalidate()
これらのオブジェクトを収集対象としてマークするための呼び出しはありますか?保存されている参照はいつリリースされますか?
詳細が多いほど良いです。
HttpSession
基本的に、文字列キーから任意の値へのマップです。getSession()
(JSP にアクセスするか/を呼び出して) セッションを作成するたびgetSession(true)
に、コンテナは一意の文字列セッション ID を生成し、そのHttpSession
オブジェクトへの参照を保持します。ここでも、セッション ID からHttpSession
オブジェクトへのマップが使用されます。
セッションに何かを入れると、コンテナはそのセッションへの参照を保持し、セッションはオブジェクトへの参照を保持します。しばらくそこにとどまります。アイテムがセッションから削除される状況は 3 つあります。
明示的に削除する場合 (removeAttribute()
またはsetAttribute(null)
)
invalidate()
セッション全体を行う場合。これにより、基本的にすべての属性が削除され、コンテナ管理のセッション マップからセッション全体が削除されます
セッションの有効期限が切れたとき (2 と同じ動作) これは、構成可能な時間 (たとえば 10 分) 内にサーブレット/JSP がセッションにアクセスしなかった場合に発生します。
オブジェクトがセッションから削除され (上記のポイントのいずれか)、他のコードがそのオブジェクトへの参照を保持していない場合、そのオブジェクトはガベージ コレクションの対象となり、次の GC 実行時に削除されます。
HttpSessionBindingListenerを実装するオブジェクトを HttpSession に追加して、上記の動作の一部を観察できます。このインターフェイスを実装するオブジェクトは、たとえば、セッションからバインド解除されたときにログ メッセージを出力できます。
ドキュメントはこちらで確認できます。
これは、使用するコンテナ、実装の問題に依存すると思います。