Java 会话超时参数是杀死对象还是对象保留在内存中?

Java 会话超时参数是杀死对象还是对象保留在内存中?,java,session-cookies,session-timeout,Java,Session Cookies,Session Timeout,在我的java项目web.xml中,会话超时参数设置为5分钟。5分钟后,所有会话对象都将被杀死,否则它将保留内存?我曾经有过同样的问题,所以我签出了tomcat源代码。我没有检查所有的东西,但我会尽我所能检查。有一个类有许多方法,其中两个方法与此相关 其中之一是expire,它将isValid变量更新为false。 还有另一种方法recycle,它清除所有属性并重置许多属性,如lastAccessedTime、maxInactiveInterval等。 现在我假设在会话超时时调用这些方法。所以它

在我的java项目web.xml中,会话超时参数设置为5分钟。5分钟后,所有会话对象都将被杀死,否则它将保留内存?

我曾经有过同样的问题,所以我签出了tomcat源代码。我没有检查所有的东西,但我会尽我所能检查。有一个类有许多方法,其中两个方法与此相关

其中之一是expire,它将isValid变量更新为false。 还有另一种方法recycle,它清除所有属性并重置许多属性,如lastAccessedTime、maxInactiveInterval等。 现在我假设在会话超时时调用这些方法。所以它不会杀死它们,而是回收它们

我走进会话管理器,看看这是否就是它的功能。每当有新的请求出现时,就会调用下面的方法。在此之前,很少有其他方法调用

/**
 * Get a session from the recycled ones or create a new empty one.
 * The PersistentManager manager does not need to create session data
 * because it reads it from the Store.
 */
@Override
public Session createEmptySession() {
    return (getNewSession());
}

这比GC要复杂一点。它涉及servlet容器的整个会话管理过程。我要重新打开,因为那个副本并没有涵盖所有内容。正如@SotiriosDelimanolis已经说过的,这有点复杂,因为我不是servlet容器方面的专家,不同的容器可能会选择不同的处理方式,我只能猜测:在5分钟的不活动后,容器使会话无效,它也可能从容器的会话存储中删除。如果没有其他对会话的引用阻止GC,那么如果垃圾收集器在此时运行,它可能会立即被收集。的合同说它将无效。问题是IMO invalidate是否会使会话符合GC的条件,而GC是IMO invalidate的主要目的。我使用java struts框架和程序列出的数据,并以arraylist set session.setAttributedataList dataList为例。垃圾收集可能已满,服务器有时会停止。我说,也许JVM或Weblogic应用程序服务器仍然保留内存。我们有300个用户,他们列在这个列表中。和列表始终设置为会话。使用session.removeAttributedataList删除会话。但在我看来,会话不能被终止或删除?removeAttribute与终止会话无关。您只是从会话中删除该属性。您所说的服务器何时停止是什么意思?JVM或Weblogic的RAM和CPU级别%100的服务器和服务器正在停止。但我能修好它。会话超时设置为5分钟。现在我修复了它。也许将来,我必须配置堆大小或其他。。