根据this source,这是内存泄漏的示例:
getServletContext().setAttribute("ATTR_NAME", map);
在Web应用程序中,某些对象存储在应用范围中 直到应用程序被明确停止或删除:
我不明白这是什么意思:“应用程序已已停止或已删除”-如果将Web应用程序部署在Tomcat上,我希望永远都不要停止它(因此它可以“永久”访问客户使用http)。那么这意味着重新部署吗?
更重要的是,我无法理解如何避免此类内存泄漏。我知道removeAttribute()
的{{1}}方法,但是我无法想象在哪个代码位置调用它。
假设在启动应用程序时(在ServletContextListener类中)设置setAttribute(),然后在JSP页面中访问该属性。
不幸的是,我对“对象存储在应用程序范围中”中的应用程序范围一词也不太清楚。它不是在运行Tomcat的同一个JVM中吗?