【问题标题】:Memory Leaks in Java (Swing)Java 中的内存泄漏(Swing)
【发布时间】:2014-01-02 05:07:41
【问题描述】:

我的自定义 JPanel 保留了大量的 int 数组,如下所示在 YourKit 中:


(来源:gyazo.com

我认为这是图形对象未处理的结果,但即使处理了我使用的每个图形对象,内存问题仍然存在。

如果我强制进行堆转储(并且数组被标记为不可访问),垃圾收集器将删除这些对象。然而,这种行为会导致 Java 达到较高的内存分配 (~700MB)。

swing/JPanels 中是否还有其他此类问题的常见来源?

【问题讨论】:

  • 这不是侦听器的结果 - 它发生在频繁渲染到单个 JPanel 时,而不是更改 JPanel 或任何东西。
  • 显示屏显示“无法访问”。是什么让您认为他们被“保留”了?
  • 嗯,保留也许是错误的词。我的意思是 GC 不会以任何特定的速度删除它们,这会导致堆大小猛增。
  • 除非您看到OutOfMemoryError,否则很可能只是垃圾收集器过于保守。不要沉迷于内存配置文件。

标签: java swing memory-leaks


【解决方案1】:

考虑使用JTable,而不是自定义JPanel,它只使用flyweight patternrender 可见单元格。此外,合适的TableModel 可以让您最大限度地减少数据存储所需的内存。最后,JTable 支持sorting and filtering 的方式可能使用户更易于管理大型数据集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    相关资源
    最近更新 更多