> 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.

John Hendrikx has refreshed the contents of this pull request, and previous 
commits have been removed. The incremental views will show differences compared 
to the previous content of the PR. The pull request contains one new commit 
since the last revision:

  Fix memory leak

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/2013/files
  - new: https://git.openjdk.org/jfx/pull/2013/files/fc08d30a..48e8f296

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=2013&range=01
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=2013&range=00-01

  Stats: 4 lines in 1 file changed: 4 ins; 0 del; 0 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