Memory leaks java内存泄漏的原因是什么

Memory leaks java内存泄漏的原因是什么,memory-leaks,profiling,out-of-memory,Memory Leaks,Profiling,Out Of Memory,我在Oracle iPlanet web服务器7中部署了一个web应用程序。网站在互联网上被广泛使用 部署后,堆大小不断增大,2或3周后,抛出OutOfMemory错误 所以我开始使用剖析工具。我不熟悉堆转储。我注意到char[],hashmap和String对象在堆中占用了太多的空间。我如何注意到堆转储内存泄漏的原因?我对我的记忆泄漏的推测 我使用log4j来保存log.txt文件中的大量日志代码。有什么问题吗 删除非活动会话时可能出错 一些静态值,如城市、性别类型存储在静态hashmap中

我在Oracle iPlanet web服务器7中部署了一个web应用程序。网站在互联网上被广泛使用

部署后,堆大小不断增大,2或3周后,抛出OutOfMemory错误

所以我开始使用剖析工具。我不熟悉堆转储。我注意到char[],hashmap和String对象在堆中占用了太多的空间。我如何注意到堆转储内存泄漏的原因?我对我的记忆泄漏的推测

  • 我使用log4j来保存log.txt文件中的大量日志代码。有什么问题吗

  • 删除非活动会话时可能出错

  • 一些静态值,如城市、性别类型存储在静态hashmap中

  • 我有一个登录机制,但没有注销机制。当站点再次打开时,需要重新登录。(愚蠢但尚未实施。)

  • 全部


您对它们有什么想法,或者可以添加关于内存泄漏的其他假设吗?

由于Java有垃圾收集,“内存泄漏”通常是由于您在某些对象不应保持活动状态时保留对它们的引用而导致的。 你可能仅仅从物体的年龄就能看出哪些物体可能是旧的,而哪些不应该被保留下来

  • log4j不应该引起任何问题
  • hashmap应该可以,因为您实际上希望保留这些值
  • 如果非活动会话存储在内存中并且某些内容保留对它们的引用,则可能会出现问题

您还可以尝试一件事:新项目,旨在发现java应用程序中的内存泄漏。它处于测试阶段,但应该足够稳定,可以尝试一下


作为一个侧节点,字符串和char[]几乎总是位于探查器数据的顶部。这很少意味着有什么真正的问题。

有什么东西可以摆脱陈旧的会话吗?或者会话是否存储在磁盘上,而当应用程序不处理请求时,不会在内存中保存或引用?嗨,赵,我有一个可以删除非活动会话的侦听器。这应该不是问题。至少是最不重要的一个。嗨,真实性,谢谢你的回答。明天我将在工作中分析这些物体的年龄。赵和您都认为这可能是会话问题,所以我也将寻找详细的会话删除实现。