Java HttpSession对象的生命周期是什么?

avg*_*tvs 5 java garbage-collection

显然,在某些时候,对象被创建并销毁/返回池.我对这些垃圾收集方式特别感兴趣.有没有办法控制这种行为?具体来说,是否会调用invalidate()标记这些对象进行收集?他们何时释放存储在其中的任何参考?

越详细越好.

Tom*_*icz 8

HttpSession基本上是从字符串键到某个任意值的映射.每次创建会话时(通过访问JSP或调用getSession()/ getSession(true)),容器都将生成唯一的字符串会话ID并保存对该HttpSession对象的引用.同样,它将使用从会话ID到HttpSession对象的映射.

在会话中放入某些内容后,容器将保存对该会话的引用,并且会话将保存对对象的引用.它会留在那里一段时间.您的商品将从会话中删除有三种情况:

  1. 当您明确删除它(removeAttribute()setAttribute(null))

  2. 当你invalidate()整个会议.这基本上删除了所有属性,并从容器管理的会话映射中删除整个会话

  3. 当会话到期时(与2相同的行为)当没有servlet/JSP在可配置的时间内(例如10分钟)访问会话时会发生这种情况

从会话中删除对象的时刻(上述任何一点)并且没有其他代码保存对该对象的引用,它有资格进行垃圾回收,并将在下一次GC运行期间删除.


您可以将实现HttpSessionBindingListener的对象添加到HttpSession,以观察上述某些行为.例如,实现此接口的对象可以在从会话中解除绑定时打印日志消息.

你可以在这里查看文档.