<Swing Dev> [10] RFR JDK-8175968: The javax.swing.filechooser.FileSystemView constructor consumes memory by adding a PropertyChangeListener that is never removed.
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Wed Jul 5 05:42:34 UTC 2017
Ok. Will you mind preparing a patch for your thought on this fix for us
to credit you for the fix?
Regards
Prasanta
On 7/4/2017 3:32 PM, Robin Stevens wrote:
> What I forgot to mention in my previous mail.
>
> The code of that PropertyChangeListener already does an attempt to be
> a weak listener, but the implementation is wrong.
> Because it is an anonymous class, the PropertyChangeListener itself
> keeps a hard reference to the FileSystemView instance.
> As such, the WeakReference used in the PropertyChangeListener never
> becomes null, and the listener and FileSystemView never get GC-ed.
>
> The anonymous class should be converted to a static inner class before
> this mechanism can work.
> Doing so will at least ensure that the PropertyChangeListener does not
> keep a hard reference to the FileSystemView class.
>
> Of course, in the scenario from the reported bug the
> PropertyChangeListeners will remain present on the UIManager until a
> PropertyChangeEvent is fired by the UIManager.. Not sure whether that
> is an acceptable trade-off for not having the dispose method in the API.
>
> On Tue, Jul 4, 2017 at 11:54 AM, Robin Stevens <stevensro at gmail.com
> <mailto:stevensro at gmail.com>> wrote:
>
> - There should be no need to create a public dispose method and
> shift the responsibility of disposing the listener to the user of
> the FileSystemView class.
>
> You can simply convert the PropertyChangeListener to a so-called
> weak listener, and keep this PropertyChangeListener an
> implementation detail (see the WeakChangeListener in
> javafx.beans.value package for an example of what I mean with a
> weak listener, or
> http://www.jroller.com/santhosh/entry/use_weak_listeners_to_avoid
> <http://www.jroller.com/santhosh/entry/use_weak_listeners_to_avoid>).
>
> - The javadoc of that new dispose method is unclear. How do you
> suppose somebody somebody will know what "the
> PropertyChangeListener" is. This remark of course becomes
> irrelevant if you remove that method from the public API.
>
> Robin
>
> On Tue, Jul 4, 2017 at 11:40 AM, Prasanta Sadhukhan
> <prasanta.sadhukhan at oracle.com
> <mailto:prasanta.sadhukhan at oracle.com>> wrote:
>
> Hi All,
>
> Please review a fix for a memory leak issue where
> PropertyChangeListener object added by FileSystemView
> constructor is never removed.
> Proposed fix is to add dispose() method to be called by app
> when they want to remove this resource.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8175968
> <https://bugs.openjdk.java.net/browse/JDK-8175968>
> webrev:
> http://cr.openjdk.java.net/~psadhukhan/8175968/webrev.00/
> <http://cr.openjdk.java.net/%7Epsadhukhan/8175968/webrev.00/>
>
> Regards
> Prasanta
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20170705/8813935c/attachment.html>
More information about the swing-dev
mailing list