什么时候销毁servlet?

时间:2014-07-18 19:32:35

标签: java jsp servlets

我正在检查Java Servlet教程,但是我错过了服务器何时销毁servlet的信息? 如果我想手动销毁一个未使用的Servlet以节省内存用于其他任务该怎么办呢?

因为我知道每台服务器都有内存限制,托管未使用的servlet会浪费资源和应用程序质量,

感谢您澄清这一点,因为应用程序性能是开发过程中需要关注的最重要问题之一!

4 个答案:

答案 0 :(得分:4)

在多集群环境中每个节点上只有一个Servlet实例,或者可以说每个JVM机器上每个Servlet只有一个实例。

Servlet在应用程序启动时或在第一次调用servlet时初始化。

  

什么时候服务器破坏了servlet?

当服务器关闭或处理应用程序时,所有Servlet实例都会被销毁。

  

我想手动销毁一个未使用的Servlet来为其他任务节省内存!

你不能手动销毁Servlet,Servlet就像工作人员不是数据容器一样。在大多数情况下,Servlet不包含任何实例成员以避免多线程问题。

答案 1 :(得分:1)

容器决定何时卸载servlet,此序列释放它所持有的所有资源,以便在再次加载servlet时可以重新获取它。

当servlet设置为卸载时,卸载序列调用servlet的destroy()方法。 destroy()方法包含servlet开发人员编写的清理操作。在实践中,它应该释放它已经获得的任何资源,这些资源在此步骤中不会被垃圾收集。 destroy()方法还应该让servlet有机会写出未保存的缓存信息或在下次调用init()时应该读取的任何持久信息。

如果我们在servlet上调用destroy()那么它并不意味着我们的servlet将被卸载。您可以单独调用destroy方法而无需卸载servlet。但是当容器决定从内存中卸载servlet实例时,容器会运行销毁机制,而destroy方法是销毁机制的一个步骤。

答案 2 :(得分:1)

Servlet规范没有说明何时必须关闭和销毁servlet,除了必须在容器完成正常关闭之前完成。否则,允许容器自行决定从服务中删除空闲实例,只要它准备好在以后启动新实例(如果需要的话)。

规范没有定义强制卸载servlet实例的机制。它已被卸载,回收其资源(主要是内存)是垃圾收集器的工作,当发生这种情况时很难影响。

总的来说,这些正是您选择Java技术以避免担心的细节。如果你仍然坚持要担心它们,那么请查看所选servlet容器的文档 - 如果有一种支持的方式来完成你的工作,那么你会发现它存在于那里。这样的事情将是特定于容器的。

答案 3 :(得分:0)

当需要删除servlet时,例如在停止服务器或取消部署项目时,Web容器将调用destroy方法。