JavaFX - 创建新的BooleanExpression的方法会导致内存泄漏

时间:2013-03-13 15:16:21

标签: memory-leaks javafx-2 boolean-expression

我刚刚注意到,来自BooleanExpression和Bindings类的方法not(),and()或()都会创建一个新的BooleanExpression,即使它没有任何引用,它也可能会保留在内存中。

myBool = new SimpleBooleanProperty();
 for (int i = 0; i < 10000000; i++) {
 myBool.not();
}

前面提到的代码会产生大约530 MB的内存,直到myBool&#39;变量被解除引用(并清理)。

这是一个错误还是正常行为?如果是这样,有没有办法如何清理内存而不会丢失myBool&#39;变量?

1 个答案:

答案 0 :(得分:4)

当您调用not()创建BooleanBinding时,这不是错误。此绑定使用侦听器机制绑定到SimpleBooleanProperty。这意味着SimpleBooleanProperty在绑定上保留了强引用

绑定必须是来自属性的“未绑定”。 dispose()方法可以解决问题;

BooleanBinding binding = myBool.not();
binding.dispose();

请注意,此方法的javadoc不是很准确。