<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
Fri Jul 7 08:19:33 UTC 2017
On 7/7/2017 12:51 PM, Robin Stevens wrote:
> I still do not think you need a public dispose method.
> If you use the weak listener (the correct implementation), the
> FileSystemView instance can be GC-ed, even when the
> PropertyChangeListener is still attached to the UIManager.
>
> What you can do is:
> - Store a reference to the PropertyChangeListener in the
> FileSystemView class as a field.
> - Override the finalize method of the FileSystemView class to
> de-register the PropertyChangeListener from the UIManager. Thanks to
> the weak listener, the FileSystemView will get GC-ed as the listener
> no longer keeps a hard reference to it.
>
finalize() is deprecated from jdk9 and spec says
http://hg.openjdk.java.net/jdk9/client/jdk/file/80acf577b7d0/src/java.base/share/classes/java/lang/Object.java#l599
Classes whose instances hold non-heap resources should provide a method
* to enable explicit release of those resources, Regards Prasanta
> Not the nicest way to do such cleanup (which should probably happen on
> the EDT) in a finalizer, but imho it still beats adding an extra
> method to the API and shifting the burden to the API user.
>
> Robin
>
> On Thu, Jul 6, 2017 at 3:15 PM, Prasanta Sadhukhan
> <prasanta.sadhukhan at oracle.com <mailto:prasanta.sadhukhan at oracle.com>>
> wrote:
>
> Hi Sergey,
>
> I tried with the proposed WeakPropertyChangeListener but as far I
> understand & tested, it seems also to rely on propertyChange() API
> to be called, so the scenario mentioned in the bug will still fail.
> I cannot find any other way rather than calling dispose() for the
> scenario mentioned there.
>
> Regards
> Prasanta
>
> On 7/5/2017 4:35 AM, Sergey Bylokhov wrote:
>
> Hi, Prasanta.
> Probably it is possible to implement it without users
> interaction and new api?
>
> ----- 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/20170707/66fd5b19/attachment.html>
More information about the swing-dev
mailing list