gpt4 book ai didi

java - 在 Tomcat Web 应用程序中读取序列化数据时发生奇怪的内存泄漏

转载 作者:行者123 更新时间:2023-11-28 22:33:04 24 4
gpt4 key购买 nike

我正在将一个相对简单的 Web 应用程序部署到 Tomcat 7.0.8 (JVM 1.6)。

该应用程序注册了一个 ServletContextListener 并在 WEB-INF 中有一个名为“数据”的资源。 “数据”文件包含一个名为 Data 的简单类的单个序列化实例。 Data 有一些公共(public)的 String 和 Integer 字段,但没有别的。它实现了 Serializable 并定义了自己的 serialVersionUID。

在比赛监听器中,contextInitialized() 执行以下操作:

  1. 从 ServletContext 获取“数据”的 InputStream,
  2. 从 InputStream 创建一个 ObjectInputStream,
  3. 从 ObjectInputStream 中读取单个对象,
  4. 将其转换为“数据”类型,
  5. 将字段值写入System.out,
  6. 关闭 ObjectInputStream 及其支持的 InputStream。

似乎一切正常。 但是当我通过 Tomcat 的管理器应用程序停止 webapp,然后检查内存泄漏时,Tomcat 通知我我的应用程序在停止时泄漏了内存。

我肯定问题出在 Data 类上,因为当我序列化 String 或 Integer 时,我没有看到泄漏。

有什么想法吗?

最佳答案

如果在 Web 应用程序初始化时读取一次此文件,内存泄漏有何影响?它配得上这个称号吗?

内存泄漏对 Tomcat 和所有应用程序服务器都非常重要,因为它们旨在长时间保持 Activity 状态。内存泄漏只有在出现时间较长时才是一个问题。

你的直觉很好,但我认为你的程序有缺陷。

我建议您使用更好的工具 - 与 JDK 6 及更高版本捆绑在一起的 Visual VM - 并在以更接近实际生产需求的方式使用 Tomcat 时对其进行监控。

您无法从单个请求中得出关于内存泄漏的任何结论。

关于java - 在 Tomcat Web 应用程序中读取序列化数据时发生奇怪的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5293759/

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