gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 19:34:27 26 4
gpt4 key购买 nike

显然,在某个时刻,一个对象被创建并被销毁/返回到池中。我对如何收集垃圾特别感兴趣。有什么办法可以控制这种行为吗?具体来说,调用 invalidate() 是否会将这些对象标记为要收集?他们什么时候释放存储在其中的任何引用?

越详细越好。

最佳答案

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

一旦您将某些内容放入 session 中,容器就会保存对该 session 的引用,而 session 会保存对您的对象的引用。它会在那里停留一段时间。在三种情况下,您的项目将从 session 中删除:

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

  2. 当您invalidate() 整个 session 时。这基本上删除了所有属性并从容器管理的 session 映射中删除了整个 session

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

当一个对象从 session 中删除(上述任何一点)并且没有其他代码持有对该对象的引用时,它就有资格进行垃圾收集,并将在下一次 GC 运行期间被删除。


您可以将实现HttpSessionBindingListener 的对象添加到HttpSession 以观察上述某些行为。例如,实现此接口(interface)的对象可以在与 session 解除绑定(bind)时打印日志消息。

您可以查看 documentation here .

关于java - Java HttpSession 对象的生命周期是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11456214/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com