java - 尝试在我的 java swing 代码中查找内存泄漏

标签 java swing memory-management

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

当我尝试处理一系列这些绘图时,我显然以用于保存绘图的 JScrollPane 形式保留在内存中,但我不明白为什么。保存滚动 Pane 的变量会在加载每个新文件时重新分配,但我注意到 swing RepaintManager 正在其 invalidComponents 列表中维护先前显示的 Pane 的列表。这似乎会占用每张绘图的存储空间,不久之后,当我连续处理文件时,我就会使用 1GB 内存,因此永远不会使用超过一张绘图的内存。

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

这是我认为 Eclipse 内存分析器显示的确凿证据:

enter image description here

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

我意识到如果不深入研究代码就很难判断,但如果有任何关于在哪里查看的一般建议/注意事项,那就太好了。

最佳答案

作为@MadProgrammer suggests ,您当前的代码可能会替换现有的 JScrollPane 实例:

scrollPane = new JScrollPane(view);

相反,通过 setViewportView() 更新视口(viewport)组件:

scrollPane. setViewportView(view);

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

关于java - 尝试在我的 java swing 代码中查找内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33403139/

相关文章:

java - 当我将 cookie 名称更改为自定义时,Wicket 出现错误

java - 为什么 Java Jbutton 没有正确调用 JFileChooser?

c - 二叉树插入,帮我看一下valgrinds的资料

c++ - 可以为 3rd 方库取代/取代默认 C++ std::allocator 吗?

ios - PNG 图像从未解除分配

java - 当值为 true 时,是否有更快的打印 "yes"的方法?

java - 无法在 Tomcat 中连接 jmxmp

java - 如何将相同的值写入2个数据库?

java - JOptionPane.showConfirmDialog 不停止当前线程

java - 对 java JTable 中的特定单元格进行着色