我刚刚注意到,来自BooleanExpression和Bindings类的方法not(),and()或()都会创建一个新的BooleanExpression,即使它没有任何引用,它也可能会保留在内存中。
myBool = new SimpleBooleanProperty();
for (int i = 0; i < 10000000; i++) {
myBool.not();
}
前面提到的代码会产生大约530 MB的内存,直到myBool&#39;变量被解除引用(并清理)。
这是一个错误还是正常行为?如果是这样,有没有办法如何清理内存而不会丢失myBool&#39;变量?
答案 0 :(得分:4)
当您调用not()创建BooleanBinding时,这不是错误。此绑定使用侦听器机制绑定到SimpleBooleanProperty
。这意味着SimpleBooleanProperty
在绑定上保留了强引用。
绑定必须是来自属性的“未绑定”。 dispose()方法可以解决问题;
BooleanBinding binding = myBool.not();
binding.dispose();
请注意,此方法的javadoc不是很准确。