<Swing Dev> [12] RFR JDK-8204963:javax.swing.border.TitledBorder has a memory leak
Prasanta Sadhukhan
prasanta.sadhukhan at oracle.com
Mon Aug 6 16:01:09 UTC 2018
Hi Krishna,
Anonymous class or non-static inner class holds an implicit reference to
its outer class. In this case, the anonymous class is a listener so as
long the listener is registered, it holds a reference to the instance of
the outer class. Making the listener static will allow the outer
instance to be garbage collected. Unfortunately, I guess Java does not
support static anonymous class so it needs to be a static named class.
Regards
Prasanta
On 8/6/2018 8:27 PM, Krishna Addepalli wrote:
> Hi Prasanta,
>
> Could you explain the fix a bit more. AFAIK, the earlier code should also not hold the reference to TitledBorder, longer than necessary.
> Whether an anonymous class, or a static named class, the UI manager would maintain a strong reference to PropertyChangeListener/TitledBorderPropertyChangeListener, which inturn maintains a WeakReference to TitledBorder.
>
> Thanks,
> Krishna
>
> -----Original Message-----
> From: Prasanta Sadhukhan
> Sent: Monday, August 6, 2018 8:11 PM
> To: swing-dev at openjdk.java.net
> Subject: <Swing Dev> [12] RFR JDK-8204963:javax.swing.border.TitledBorder has a memory leak
>
> Hi All,
>
> Please review a memory leak issue in javax.swing.border.TitledBorder where it is seen that TitledBorder instances are never freed. This leak is an aftereffect of JDK-8152159.
> This is because
> javax.swing.border.TitledBorder.installPropertyChangeListeners() creates an instance of an anonymous inner class that implicitly holds a reference to the containing TitledBorder class.
> Proposed fix is to make it a named static class so that it does not hold reference and can be garbage collected.
>
> Bug:https://bugs.openjdk.java.net/browse/JDK-8204963
> webrev: http://cr.openjdk.java.net/~psadhukhan/8204963/webrev.0/
>
> 8152159 testcase also worked well.
>
> Regards
> Prasanta
More information about the swing-dev
mailing list