首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解java (可见内存泄漏)中的NetBeans内存配置文件会话?

如何理解java (可见内存泄漏)中的NetBeans内存配置文件会话?
EN

Stack Overflow用户
提问于 2011-08-12 20:22:46
回答 2查看 1.7K关注 0票数 2

我是Java中的乞丐,我想知道如何在NetBeans中分析这个内存配置文件会话,以及如何监视它以帮助查找内存泄漏?

什么是“活字节”?我可以看到,当我将所有活字节之和时,我只会得到java应用程序系统内存所使用的一小部分。为什么没有关于每种对象类型的分配字节的信息?内存泄漏的“分配对象”值不断增长吗?

这是具有大量并发线程和http连接的应用程序。我检查过线程,它们工作正常--我的意思是同时只有20个线程。我使用JBOSS进行http连接,使用jSoup解析HTML。

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

追加资源:

编辑:

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

注意:我没有在我的应用程序中创建任何LinkedHashMap,所以它必须由其他库创建。TagNode是一个在“html”清理后保存已清理的HTML的对象。我的应用程序中只有一个TagNode对象,它是netty响应处理程序中的局部变量(由messageReceived调用)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-12 23:08:08

比起Netbeans的内置诊断设备,我一直更喜欢月食垫工具。与Netbeans相比,MAT还可以处理更大的堆块。

最简单的方法是让jvm在OOM上抛出堆,将其输入MAT,并根据泄漏可疑列表跟踪内存泄漏的可能原因。

代码语言:javascript
复制
-XX:+HeapDumpOnOutOfMemoryError

是您需要的JVM选项。另一种方法是在应用程序OOMs之前定期生成堆转储,并比较MAT中的堆--它具有比较转储的功能。请参阅这里以了解如何生成转储。有时,检查堆元素的内容是必要的,以确定它们来自何处。

这并不容易,学习如何放大堆转储中的罪魁祸首需要一些时间,但这是一项非常有用的技能。

票数 2
EN

Stack Overflow用户

发布于 2011-08-12 21:16:37

您似乎有很多char[]对象。我发现我的大部分内存泄漏来自错误构造的循环,在这些循环中,它们的迭代次数比应该的要多。这会产生大量的对象,导致内存泄漏。

活动字节就是活动对象占用的字节总数。

有许多char[]活动字节在使用中。我对此表示怀疑,因为这可能是内存泄漏发生的原因。

最好创建断点并逐步执行,以查看内存泄漏发生在哪一行。

阅读的一个好地方是介绍如何在Java中分析NetBeans应用程序。应该能够帮助您在NetBeans中调试。

希望这能有所帮助。

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

https://stackoverflow.com/questions/7045895

复制
相关文章

相似问题

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