Fixes a problem with leaked references in XYChart.  A few things conspire here 
to make this into a memory leak:

- The weak bindings used by StringBinding leave behind listener "stubs" when 
GC'd; that's just how they work, it is a "strong" listener that wraps a weak 
referenced listener.  The strong part remains behind, and is cleaned up when a 
new listener is added/removed by ExpressionHelper (and if that never happens, 
those stubs remain there indefinitely).
- The fluent bindings (map/flatMap/orElse) use normal listeners, but only when 
they are observed themselves (lazy listeners)
- The "stub" that is left behind counts as being observed, so the fluent 
bindings don't unsubscribe themselves

The leak has nothing to do with the node or the accessible property, but purely 
by the StringBinding leaving behind stubs on the flat mapped properties.

The leak is actually because the Series to which the Data object belongs is 
referencing the Data object.  The flatMaps track the series object so they 
added a listener to the series object, and they think they are observed 
indefinitely because of the listener stub.

The easiest solution here is to ensure the Series object is not tracked when 
not needed; this can be achieved by setting the series to `null` in the 
ListChangeListener for the Data list.

-------------

Commit messages:
 - Fix memory leak

Changes: https://git.openjdk.org/jfx/pull/2013/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=2013&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8373908
  Stats: 30 lines in 1 file changed: 15 ins; 13 del; 2 mod
  Patch: https://git.openjdk.org/jfx/pull/2013.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/2013/head:pull/2013

PR: https://git.openjdk.org/jfx/pull/2013

Reply via email to