是什么导致java中的内存泄漏

时间:2011-06-08 19:44:00

标签: memory-leaks profiling out-of-memory

我在Oracle iPlanet Web服务器7中部署了一个Web应用程序。网站在Internet中被主动使用。

部署后,堆大小正在增长,在2或3周后,将抛出OutOfMemory错误。

所以我开始使用分析工具。我不熟悉堆转储。我注意到char [],hashmap和String对象在堆上占用太多。如何注意导致堆转储内存泄漏的原因?我对内存泄漏的猜测;

  • 我使用log4j记录代码以保存在log.txt文件中。它有问题吗?

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

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

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

  • 所有

您对它们有所了解吗?或者您是否可以添加有关内存泄漏的其他假设?

2 个答案:

答案 0 :(得分:1)

由于Java具有垃圾收集,因此“内存泄漏”通常是在不应该保留活动时保留对某些对象的引用的结果。 你可能只能看到物体的年龄,这些物体可能是旧的,并且当它们不应该被保留时。

  • log4j不应该导致任何问题。
  • hashmap应该没问题,因为你实际上想要保留这些值。
  • 如果非活动会话存储在内存中并且某些内容会引用它们,则可能会出现问题。

答案 1 :(得分:1)

还有一件事你可以尝试:新项目Plumbr,旨在查找java应用程序中的内存泄漏。它处于测试阶段,但应该足够稳定以便尝试。

作为一个副节点,Strings和char []几乎总是在分析器的数据之上。这很少意味着任何真正的问题。