1

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

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

上述代码会创建大约 530 MB 的内存,直到取消引用(并清理)“myBool”变量为止。

这是错误还是正常行为?如果是这样,有什么方法可以在不丢失“myBool”变量的情况下清理内存?

4

1 回答 1

4

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

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

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

注意这个方法的javadoc不是很准确。

于 2013-03-13T17:29:41.820 回答