我发现我们的应用程序中存在一个内存泄漏问题,其中一个私有静态字段
我不明白为什么要设计成这样。这似乎与垃圾回收的精神相悖,因为我需要显式地告诉系统我已经完成了
我理解
有人可以解释为什么这是必要的吗?
java.awt.Window.allWindows
跟踪每个实例化的Window
。我们创建、使用并且忘记了对话框,期望它们会消失并被垃圾回收。但是这个私有字段会让它们一直处于范围内,直到调用dispose()
方法。而且根据定义,当它们超出范围时,我们无法这样做。我不明白为什么要设计成这样。这似乎与垃圾回收的精神相悖,因为我需要显式地告诉系统我已经完成了
Window
对象。显然,我已经完成了它,因为它已经超出了范围。我理解
dispose()
方法的作用:清除系统对等体对象。我确实理解这是Java之外的部分,你需要某种方式来处理它,并且Swing不能只是失去这些对象的跟踪,否则就会出现内存泄漏。但是,将我的Window
引用保留永远有何意义,当我再也不会使用它?有人可以解释为什么这是必要的吗?
removeNotify
方法时,Window
将从allWindows
中移除。Window
包含本地资源,因此应该像处理数据库连接一样将其处理掉。 - Tom Hawtin - tackline