RFR: 8236840: Memory leak when switching ButtonSkin

Ambarish Rapte arapte at openjdk.java.net
Fri Mar 27 12:15:10 UTC 2020


On Mon, 23 Mar 2020 23:40:39 GMT, Kevin Rushforth <kcr at openjdk.org> wrote:

> 
> 
> Using a WeakListener is certainly easier, but runs the risk of the listener being removed too early and not cleaning up
> after itself. I'm not suggesting that's the case here, but it is worth looking at.


The listener does not get early GCed here. I did verify this by creating large number of `ButtonSkin`s. The latest
`ButtonSkin` set on the `Button` is never GCed

>
>
>The one thing I would ask you to take a look at is whether it would matter if the old skin didn't call
>`setDefaultButton(oldScene, false)` when removed (and similarly `setCancelButton`).


This seems to be a bigger issue.
If we create multiple `ButtonSkin`s for a given `Button`, then all the `ButtonSkin` register listeners with the
properties of that `Button`. And it results in various listeners being added to same property of the `Button`. and this
should be a common issue across all skins.

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

PR: https://git.openjdk.java.net/jfx/pull/147


More information about the openjfx-dev mailing list