<Swing Dev> Review Request for 8163261: regression on Linux: java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java

Alexandr Scherbatiy alexandr.scherbatiy at oracle.com
Mon Aug 29 12:38:51 UTC 2016


CachedPainter.paint0() uses the object returned by getClass() as a key 
for the cache.
Is it possible to use PainterMultiResolutionCachedImage.class object as 
a key in the PainterMultiResolutionCachedImage.getResolutionVariant() 
method?

Thanks,
Alexandr.

On 8/26/2016 1:34 PM, Ambarish Rapte wrote:
>
> Hi Alex & All,
>
> Please review the updated webrev : 
> http://cr.openjdk.java.net/~arapte/8163261/webrev.02/ 
> <http://cr.openjdk.java.net/%7Earapte/8163261/webrev.02/>
>
> Changes: (Copying from the previous email)
>
> I have included the change you suggested,  to set component reference 
> null after painting the component.
>
> In addition there is change in PainterMultiResolutionCachedImage to 
> add /hashCode()/ & /equals()/ methods.
>
> Object of /PainterMultiResolutionCachedImage/ is used as key in the 
> /Map<Object, ImageCache> cacheMap./
>
> /hashCode()/ & /equals()/ would avoid multiple entries of similar 
> image objects in the /cacheMap/ & help reduce the size of /cacheMap./
>
> //
>
> Verified this change by executing the /SwinSet2/ demo, all components 
> get painted correctly.
>
> Also a small change in test, added check on panel reference and 
> modified error message.
>
> Regards,
>
> Ambarish
>
> *From:*Ambarish Rapte
> *Sent:* Friday, August 26, 2016 12:34 PM
> *To:* Ambarish Rapte; Alexander Scherbatiy; Sergey Bylokhov; Rajeev 
> Chamyal; swing-dev at openjdk.java.net
> *Subject:* RE: <Swing Dev> Review Request for 8163261: regression on 
> Linux: java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java
>
> Hi All,
>
> Please hold the review for this.
>
> There are some merge conflicts with latest code so I shall update the 
> webrev again for review.
>
> Regards,
>
> Ambarish
>
> *From:*Ambarish Rapte
> *Sent:* Thursday, August 25, 2016 10:19 PM
> *To:* Alexander Scherbatiy; Sergey Bylokhov; Rajeev Chamyal; 
> swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
> *Subject:* Re: <Swing Dev> Review Request for 8163261: regression on 
> Linux: java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java
>
> Hi Alex,
>
> Thanks for the review comments,
>
> Please review the updated webrev: 
> http://cr.openjdk.java.net/~arapte/8163261/webrev.01/ 
> <http://cr.openjdk.java.net/%7Earapte/8163261/webrev.01/>
>
> I have included the change you suggested,  to set component reference 
> null after painting the component.
>
> In addition there is change in PainterMultiResolutionCachedImage to 
> add /hashCode()/ & /equals()/ methods.
>
> Object of /PainterMultiResolutionCachedImage/ is used as key in the 
> /Map<Object, ImageCache> cacheMap./
>
> /hashCode()/ & /equals()/ would avoid multiple entries of similar 
> image objects in the /cacheMap/ & help reduce the size of /cacheMap./
>
> //
>
> Verified this change by executing the /SwinSet2/ demo, all components 
> get painted correctly.
>
> Also a small change in test, added check on panel reference and 
> modified error message.
>
> Regards,
>
> Ambarish
>
> *From:*Alexander Scherbatiy
> *Sent:* Monday, August 22, 2016 5:47 PM
> *To:* Ambarish Rapte; Sergey Bylokhov; Rajeev Chamyal; 
> swing-dev at openjdk.java.net <mailto:swing-dev at openjdk.java.net>
> *Subject:* Re: <Swing Dev> Review Request for 8163261: regression on 
> Linux: java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java
>
>
> On 17/08/16 15:49, Alexandr Scherbatiy wrote:
>
> On 8/15/2016 12:43 PM, Ambarish Rapte wrote:
>
> Hi,
>
>                 Please review fix for JDK9,
>
>                 Bug: https://bugs.openjdk.java.net/browse/JDK-8163261
>
>                 Webrev: 
> http://cr.openjdk.java.net/~arapte/8163261/webrev.00/ 
> <http://cr.openjdk.java.net/%7Earapte/8163261/webrev.00/>
>
> Issue:
>
>                 Reference to JButton was not getting collected by GC.
>
> Cause:
>
>                 A strong reference to objects was held by 
> PainterMultiResolutionCachedImage.
>
>                 And the image reference was held by HashMap.
>
> Fix:
>
>                 Changing the HashMap to WeakHashMap. Entry to 
> WeakHashMap gets removed after the object has no other strong reference.
>
>     May be using the soft reference would be better in this case. It 
> could be expensive to recreate a cache with images every time GC 
> removed them.
>
>
> There is the code which sets a component to the 
> PainterMultiResolutionCachedImage:
> CachedPainter.paint0(...)
> -------
>         if (image instanceof PainterMultiResolutionCachedImage) {
>             ((PainterMultiResolutionCachedImage) image).setParams(c, 
> args);
>         }
>
>         // Render to the passed in Graphics
>         paintImage(c, g, x, y, w, h, image, args);
> -------
>
> May be it is possible to clean up the component and args from the 
> PainterMultiResolutionCachedImage after the image is drawn?
>
>
>   Thanks,
>   Alexandr.
>
> Regards,
>
> Ambarish
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/swing-dev/attachments/20160829/dfaf5f31/attachment.html>


More information about the swing-dev mailing list