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 に答える