2012-07-12 17 views
5

Obviamente, en algún momento se crea un objeto y se destruye/devuelve al grupo. Estoy especialmente interesado en cómo se recolectan los desechos. ¿Hay alguna manera de controlar este comportamiento? Específicamente, ¿una llamada al invalidate() marcará estos objetos para la recopilación? ¿Cuándo liberan las referencias almacenadas en ellos?¿Cuál es el ciclo de vida de un objeto Java HttpSession?

Cuantos más detalles, mejor.

Respuesta

8

HttpSession es básicamente un mapa de la clave de cadena a un valor arbitrario. Cada vez que crea una sesión (accediendo a JSP o llamando al getSession()/getSession(true)), el contenedor generará una ID de sesión de cadena única y mantendrá una referencia a ese objeto HttpSession. De nuevo, usará un mapa de la ID de sesión al objeto HttpSession.

Una vez que coloca algo en la sesión, el contenedor contiene una referencia a esa sesión y la sesión hace referencia a su objeto. Permanecerá allí por un tiempo. Hay tres situación en la que su artículo será retirado de la sesión:

  1. Cuando se quita de forma explícita (o removeAttribute()setAttribute(null))

  2. Cuando invalidate() toda la sesión. Esto básicamente elimina todos los atributos y elimina toda la sesión del mapa de sesión administrado por contenedor

  3. Cuando la sesión expira (el mismo comportamiento que con 2.) Esto sucede cuando ningún servlet/JSP accede a la sesión en una cantidad de tiempo configurable (ej. 10 minutos)

en el momento en que un objeto se retira de la sesión (cualquiera de los puntos anteriores) y ningún otro código contiene una referencia a ese objeto, es elegible para la recolección de basura y se eliminará durante el siguiente proceso de GC .


Puede agregar un objeto que implementa HttpSessionBindingListener a una HttpSession observar algunos de los comportamientos descritos anteriormente. Un objeto que implementa esta interfaz podría, por ejemplo, imprimir un mensaje de registro cuando se libere de la sesión.

Puede consultar el documentation here.

1

Creo que esto depende del contenedor que utiliza, la cuestión de la implementación.

Cuestiones relacionadas