相关疑难解决方法(0)

你为什么要处理一个超出范围的java.awt.Window?

我在我们的应用程序中发现的一个内存泄漏是java.awt.Window.allWindows私有静态字段,它跟踪每个Window实例化的内容.我们创建,使用,然后忘记了对话框,期望这些对话框会消失并被垃圾收集.这个私有字段会无限期地将它们保留在范围内,直到dispose()调用它们为止.根据定义,当他们超出范围时,我们不能这样做.

我不明白为什么这是这样设计的.与垃圾收集的精神相反,当我完成一个Window对象时,必须明确让系统知道.显然我已经完成了它,因为它超出了范围.

我理解该dispose()方法正在做什么:摆脱系统对等对象.我确实理解这是在Java之外,你需要一些方法来做到这一点,并且Swing不应该只是失去对这些对象的跟踪,否则它会有内存泄漏.但是Window,当我永远不再使用它时,通过永久保持对我周围的参考来实现的目标是什么?

有人可以解释为什么这是必要的吗?

java garbage-collection memory-leaks memory-management

9
推荐指数
1
解决办法
1万
查看次数