Component#removeAll()清除已删除控件的Observer / Listener吗?

时间:2014-06-18 07:09:08

标签: java garbage-collection listener jcomponent

我有一个容器JComponents,如JButtonJSlider有听众(onClick,onValueChanged ......)。有时,容器内容会被container.removeAll()删除并重新填充JComponents。组件的侦听器包含对持久对象实例的引用。

现在我的问题是,GC是否清除了旧组件的侦听器,这些组件已被删除?

1 个答案:

答案 0 :(得分:2)

这取决于。可以从其他地方引用组件(甚至来自侦听器本身)。如果添加了监听器,使得没有其他引用它们,则组件可能是GCed,但是,代码中其他位置的其他引用仍然可能是这些组件。

简而言之,在没有分析代码的情况下,无法确定组件是否会得到GC。

了解组件是否获得GC的一种方法是使用PhantomReference s(参见PhantomReference
为了检查,将您传递的引用队列轮询为PhantomReference