avg*_*tvs 5 java garbage-collection
显然,在某些时候,对象被创建并销毁/返回池.我对这些垃圾收集方式特别感兴趣.有没有办法控制这种行为?具体来说,是否会调用invalidate()标记这些对象进行收集?他们何时释放存储在其中的任何参考?
越详细越好.
HttpSession基本上是从字符串键到某个任意值的映射.每次创建会话时(通过访问JSP或调用getSession()/ getSession(true)),容器都将生成唯一的字符串会话ID并保存对该HttpSession对象的引用.同样,它将使用从会话ID到HttpSession对象的映射.
在会话中放入某些内容后,容器将保存对该会话的引用,并且会话将保存对对象的引用.它会留在那里一段时间.您的商品将从会话中删除有三种情况:
当您明确删除它(removeAttribute()或setAttribute(null))
当你invalidate()整个会议.这基本上删除了所有属性,并从容器管理的会话映射中删除整个会话
当会话到期时(与2相同的行为)当没有servlet/JSP在可配置的时间内(例如10分钟)访问会话时会发生这种情况
从会话中删除对象的时刻(上述任何一点)并且没有其他代码保存对该对象的引用,它有资格进行垃圾回收,并将在下一次GC运行期间删除.
您可以将实现HttpSessionBindingListener的对象添加到HttpSession,以观察上述某些行为.例如,实现此接口的对象可以在从会话中解除绑定时打印日志消息.