首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查找java内存泄漏

如何查找java内存泄漏
EN

Stack Overflow用户
提问于 2010-01-27 01:40:49
回答 5查看 894关注 0票数 2

我遇到了Java内存泄漏的问题,由于某种原因,它没有出现在我的分析器(Yourkit)中。当我运行我的Java应用程序(一个带有一些用于监听、发送和处理数据的线程的服务器)时,似乎每次我得到一个新的连接并且这个连接被删除时,一些内存并没有被清理。至少,windows (和Linux)是这么说的。

当我用分析器运行我的应用程序时,它只是简单地显示了它应该是的内存,当一个线程关闭时,所有的内存都被清除了。然而,在现实中,过了一段时间Java就崩溃了,因为它使用了太多的内存,所以不管我的分析器怎么说,我倾向于相信windows和Linux我确实在使用它。运行垃圾收集也不会清理内存。

那么这会是什么呢?我已经尝试了我所知道的所有方法,关闭线程,将所有对象设置为null,删除每个数组的内容,等等。我非常确定线程是关闭的,因为eclipse和编译器以及打印输出似乎都确认了这一点。

有谁有线索吗?

EN

回答 5

Stack Overflow用户

发布于 2010-01-27 01:53:51

您可以要求VM在发生OutOfMemory错误时生成一个堆转储,然后分析此堆转储。

对于Sun的HotSpot,您可以按照here的描述请求生成堆转储。

要分析转储,可以使用jVisualVM或jhat。(也许会有更好的工具,不过到目前为止我还不需要它们。)

票数 2
EN

Stack Overflow用户

发布于 2010-01-27 02:32:38

使用jvisualvm (在Java6JDK中),看看它是否提供了YourKit没有提供的信息(包括分析)。

票数 1
EN

Stack Overflow用户

发布于 2010-01-27 01:48:54

这听起来像是你在以错误的方式分析一些东西,你可能遗漏了一些东西。

分析器错过泄漏是不常见的,而且这种泄漏显然严重到足以使您的服务器崩溃。你有没有检查过你崩溃的原因确实和内存有关?

你能发布你的代码的可疑部分和一些分析结果吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2141337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档