<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