我是Java中的乞丐,我想知道如何在NetBeans中分析这个内存配置文件会话,以及如何监视它以帮助查找内存泄漏?
什么是“活字节”?我可以看到,当我将所有活字节之和时,我只会得到java应用程序系统内存所使用的一小部分。为什么没有关于每种对象类型的分配字节的信息?内存泄漏的“分配对象”值不断增长吗?
这是具有大量并发线程和http连接的应用程序。我检查过线程,它们工作正常--我的意思是同时只有20个线程。我使用JBOSS进行http连接,使用jSoup解析HTML。

这个内存泄漏是由于分配了太多的ParseError对象造成的吗?还是我应该通过字节创建堆栈跟踪来解释内存泄漏的原因?
追加资源:


编辑:
我已经将添加到我的项目中。这是因为我再也看不到任何解析器错误了。内存泄漏增长现在大约慢3-4倍.在达到800 in的内存使用量后,app崩溃了,我可以在NetBeans中查看堆。结果:

注意:我没有在我的应用程序中创建任何LinkedHashMap,所以它必须由其他库创建。TagNode是一个在“html”清理后保存已清理的HTML的对象。我的应用程序中只有一个TagNode对象,它是netty响应处理程序中的局部变量(由messageReceived调用)。
发布于 2011-08-12 23:08:08
比起Netbeans的内置诊断设备,我一直更喜欢月食垫工具。与Netbeans相比,MAT还可以处理更大的堆块。
最简单的方法是让jvm在OOM上抛出堆,将其输入MAT,并根据泄漏可疑列表跟踪内存泄漏的可能原因。
-XX:+HeapDumpOnOutOfMemoryError是您需要的JVM选项。另一种方法是在应用程序OOMs之前定期生成堆转储,并比较MAT中的堆--它具有比较转储的功能。请参阅这里以了解如何生成转储。有时,检查堆元素的内容是必要的,以确定它们来自何处。
这并不容易,学习如何放大堆转储中的罪魁祸首需要一些时间,但这是一项非常有用的技能。
发布于 2011-08-12 21:16:37
您似乎有很多char[]对象。我发现我的大部分内存泄漏来自错误构造的循环,在这些循环中,它们的迭代次数比应该的要多。这会产生大量的对象,导致内存泄漏。
活动字节就是活动对象占用的字节总数。
有许多char[]活动字节在使用中。我对此表示怀疑,因为这可能是内存泄漏发生的原因。
最好创建断点并逐步执行,以查看内存泄漏发生在哪一行。
阅读的一个好地方是介绍如何在Java中分析NetBeans应用程序。应该能够帮助您在NetBeans中调试。
希望这能有所帮助。
https://stackoverflow.com/questions/7045895
复制相似问题