我正在向Tomcat 7.0.8(JVM 1.6)部署一个相对简单的Web应用程序。
该应用程序注册了一个ServletContextListener,并且在WEB-INF中有一个名为“data”的资源。 “data”文件包含一个名为Data的简单类的单个序列化实例。数据有一些公共字符串和整数字段,但没有别的。它实现了Serializable并定义了自己的serialVersionUID。
在比赛监听器中,contextInitialized()执行以下操作:
一切似乎都很好。 然而当我通过Tomcat的管理器应用程序停止webapp,然后检查内存泄漏时,Tomcat通知我,我的应用程序在停止时泄漏了内存。
我很肯定问题在于Data类,因为当我序列化String或Integer时,我没有看到泄漏。
有什么想法吗?
答案 0 :(得分:0)
如果在初始化Web应用程序时读入此文件一次,内存泄漏如何显着?它甚至值得称赞吗?
内存泄漏对Tomcat和所有应用服务器都很重要,因为它们可能会长时间保持活着状态。内存泄漏只有在较长时间内出现时才会出现问题。
你的直觉很好,但我认为你的程序存在缺陷。
我建议你使用一个更好的工具 - 与JDK 6及更高版本捆绑在一起的Visual VM - 并且在你的Tomcat以更接近你的实际生产需求的方式使用时监控你的Tomcat。
您无法从单个请求中得出有关内存泄漏的任何结论。