我有一个容器JComponents
,如JButton
或JSlider
有听众(onClick,onValueChanged ......)。有时,容器内容会被container.removeAll()
删除并重新填充JComponents
。组件的侦听器包含对持久对象实例的引用。
现在我的问题是,GC
是否清除了旧组件的侦听器,这些组件已被删除?
答案 0 :(得分:2)
这取决于。可以从其他地方引用组件(甚至来自侦听器本身)。如果添加了监听器,使得没有其他引用它们,则组件可能是GCed,但是,代码中其他位置的其他引用仍然可能是这些组件。
简而言之,在没有分析代码的情况下,无法确定组件是否会得到GC。
了解组件是否获得GC的一种方法是使用PhantomReference
s(参见PhantomReference)
为了检查,将您传递的引用队列轮询为PhantomReference
。