繁体   English   中英

尝试在我的Java Swing代码中发现内存泄漏

[英]Trying to find memory leak in my java swing code

我有一个相当大的Java应用程序,它创建描述图纸的复杂数据结构,从原始的带时间戳的数据点开始显示图纸,对其进行分析等。

当我尝试处理一系列这些绘图时,我显然以用于保存绘图的JScrollPane形式挂在内存上,但我不知道为什么。 每个装入的新文件都会重新分配保存滚动窗格的变量,但我注意到,摆动的RepaintManager会在其invalidComponents列表中维护以前显示的窗格的列表。 然后,这似乎挂在每个图形的存储上,不久以后,当我串行处理文件时,我已经有了1GB的内存,因此使用的图形内存永远不会超过一个。

我遇到了内存转储,并使用Eclipse内存分析器和YourKit进行了分析。

我认为这是Eclipse的内存分析器显示的烟枪:

在此处输入图片说明

花了很长时间尝试深入研究此问题。 对于任何有关我的错误可能出在哪里或如何解决问题的建议,我将不胜感激。

我意识到如果不深入研究代码就很难说出来,但是,即使对于有关查找位置的任何常规建议/注意事项,也很棒。

正如@MadProgrammer 建议的那样 ,您当前的代码大概会替换现有的JScrollPane实例:

scrollPane = new JScrollPane(view);

而是通过setViewportView()更新视口组件:

scrollPane. setViewportView(view);

更好的是,直接更新view的内容。 详细信息将取决于您的实现,但是validate()repaint()表示一种方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM