我对JavaFx 8和监听器内存泄漏问题有些困惑。官方文档说:
我会翻译中文。当一个
ObservableValue存储了一个对监听器的强引用,这会阻止监听器被垃圾回收,并可能导致内存泄漏。
我希望有一个例子能够说明使用ObservableValue<T>
的addListener
方法会导致内存泄漏。
例如,如果我有一个像这样的类:
public class ConfigurationPane extends AnchorPane {
@FXML
private Label titleLabel;
public ConfigurationPane () {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("view/ConfigurationPane .fxml"));
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (IOException e) {
e.printStackTrace();
}
}
@FXML
private void initialize() {
titleLabel.sceneProperty().addListener(new MyListener());
}
}
我会翻译中文。当一个
ConfigurationPane
对象被垃圾回收时,MyListener
对象也将被垃圾回收,我会有内存泄漏吗?我无法看到一个场景能够防止监听器被垃圾回收的强引用。顺便说一下,我看到其他关于这个问题的S.O.问题,但是没有一个对我理解问题有所帮助。谢谢。