ski*_*ppy 9 java garbage-collection memory-leaks memory-management
我在我们的应用程序中发现的一个内存泄漏是java.awt.Window.allWindows
私有静态字段,它跟踪每个Window
实例化的内容.我们创建,使用,然后忘记了对话框,期望这些对话框会消失并被垃圾收集.这个私有字段会无限期地将它们保留在范围内,直到dispose()
调用它们为止.根据定义,当他们超出范围时,我们不能这样做.
我不明白为什么这是这样设计的.与垃圾收集的精神相反,当我完成一个Window
对象时,必须明确让系统知道.显然我已经完成了它,因为它超出了范围.
我理解该dispose()
方法正在做什么:摆脱系统对等对象.我确实理解这是在Java之外,你需要一些方法来做到这一点,并且Swing不应该只是失去对这些对象的跟踪,否则它会有内存泄漏.但是Window
,当我永远不再使用它时,通过永久保持对我周围的参考来实现的目标是什么?
有人可以解释为什么这是必要的吗?
Pow*_*ord 14
我不想这么说,但这就是GUI的工作原理.
Windows是非阻塞的.这意味着一旦在代码中创建一个代码,代码就会继续执行.
这意味着您的Window可能会在创建后立即超出范围,除非您在其他位置明确存储了对它的引用.此时窗口仍在屏幕上.
这也意味着当你完成它时,你还需要一些其他方法来摆脱它.输入Window dispose()
方法,可以从一个Window的侦听器中调用.
归档时间: |
|
查看次数: |
11384 次 |
最近记录: |