2013-03-13 41 views
1

我剛剛注意到,來自BooleanExpression和Bindings兩個類的not(),(),或()方法都會創建一個新的BooleanExpression,即使它不存在有任何參考。JavaFX - 創建新布爾表達式的方法導致內存泄漏

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

上述代碼創建了大約530 MB內存,直到'myBool'變量被取消引用(和清除)爲止。

這是一個錯誤或正常行爲?如果是這樣,有沒有辦法如何清理內存而不會丟失'myBool'變量?

回答

4

這是不是一個錯誤,當你調用not()你正在創建一個BooleanBinding。使用偵聽器機制將此綁定綁定到SimpleBooleanProperty。這意味着SimpleBooleanProperty在綁定上保留強引用

綁定必須從屬性「解除綁定」。 dispose()方法有竅門;

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

請注意,此方法的javadoc不是很準確。

+0

很好的答案!非常感謝你gontard! – dpelisek 2013-03-14 09:38:36

+0

不客氣。 – gontard 2013-03-14 09:56:32