Docs for Binding lacking?
Jonathan Giles
jonathan.giles at oracle.com
Thu Jun 13 16:53:19 PDT 2013
I'm not involved in the development of the binding API, so I'll leave a
full response to the professionals, but you may be interested in this
jira that was just resolved yesterday by Martin:
https://javafx-jira.kenai.com/browse/RT-31031
-- Jonathan
On 14/06/2013 11:41 a.m., John Hendrikx wrote:
> Hi List,
>
> I'm having a hard time to find good documentation on some aspects of
> bind and bindDirectional. I found several forum posts, some books and
> lots of examples, but none really touch upon the subject of references
> between bindings and garbage collection.
>
> Would it be possible to enhance the javadocs a bit or create a
> tutorial for this? Things that are unclear for me (until I test by
> trail and error), so correct me if I got something wrong:
>
> 1) Garbage collection of bindings; basically, X.bind(Y) will result in
> X's lifecycle to be bound to Y. If Y is a long-lived object, and X is
> a short-lived frequently replaced object, then many instances of X
> will be left around consuming memory (and CPU cycles on every Y
> update) until Y dies. A single forgotten binding of this type can
> result in whole UI graphs to be locked in memory.
>
> The same does not occur with bindBidirectional. The javadocs describe
> this type of binding as "bind with inverse", which sounds to me it is
> mere short-hand for doing X.bind(Y) + Y.bind(X), if that were allowed,
> resulting in both X and Y's lifecycles to be bound to each other.
> Yet, that's not what happens. With a bidirectional binding, either X
> or Y can go out of scope, and the binding dies with it, which is a
> very nice feature and an important consideration when choosing the
> type of binding that it deserves some mention in the docs.
>
> Using bind() seems to be the default that is used everywhere, because
> it is short and nice -- I'm however thinking my life would have been
> much easier had I used bindBidirectional as the "default" binding
> everywhere in my code -- I'm pretty sure most of the bindings I did in
> the past could have been bidirectional without any consequence. In
> complex cases with many unidirectional bindings (that maybe could have
> been bidirectional without impacting the result), I resorted to using
> a helper class that keeps track of all the bindings created so they
> can all be unbound with a single call to avoid creating somekind of
> memory leak.
>
> 2) For bi directional bindings, it is unclear which value will be the
> final result of the two bound properties (especially confusing in
> Bindings.bindBidirectional). X.bind(Y) will mean X takes the value of
> Y as the direction of the binding enforces it. X.bindBidirectional(Y)
> or Bindings.bindBidirectional(X, Y) have no direction and it is
> unclear whether, initially, the result will be the value of X or the
> value of Y.
>
> --John
>
More information about the openjfx-dev
mailing list