[ 
https://issues.apache.org/jira/browse/PIVOT-861?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13576707#comment-13576707
 ] 

Sandro Martini commented on PIVOT-861:
--------------------------------------

Ok, after other tests I have more info: it's really something related to the 
resourceCache, in ApplicationContext.java:
    private static HashMap<URI, Object> resourceCache = new HashMap<URI, 
Object>();
    private static ResourceCacheDictionary resourceCacheDictionary = new 
ResourceCacheDictionary();
for 2.1 we could think to add some injection way to let users set a different 
kind of resourceCache, 
backed by something like a WeakHashMap (using WeakReferences) ... but in Pivot 
currently we haven't a collection like this, and now it's static, etc, so for 
now I propose the following workaround:
add a flag to disable ApplicationContext resourceCache, 
but implementing it directly in methods of ResourceCacheDictionary for a 
cleaner/backwards compatible approach ... I have to verify but should be 
possible.
In this way I get a result like when running your pure Java version: 
Biggest Objects By Retained Size:  sun.awt.image.BufImgVolatileSurfaceManager @ 
0x28364e98  , Shallow Size: 40 B Retained Size: 4 MB

Some info:
http://stackoverflow.com/a/6639894  ,  http://stackoverflow.com/a/4948789 ,  
http://weblogs.java.net/blog/2006/05/04/understanding-weak-references

Probably a long-term solution requires more changes in many classes (even 
incompatible ones), so I think that for now the proposed solution should be 
enough. Tell me what you think.

                
> Memory leak: Window icon ImageListenerList retains reference to closed 
> windows, preventing garbage collection
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: PIVOT-861
>                 URL: https://issues.apache.org/jira/browse/PIVOT-861
>             Project: Pivot
>          Issue Type: Bug
>          Components: wtk, wtk-media
>    Affects Versions: 2.0.2
>         Environment: Windows XP, Java 1.7.0_05
>            Reporter: David Keen
>            Assignee: Sandro Martini
>             Fix For: 2.0.3
>
>         Attachments: leaktest.zip, Pivot861.launch, PivotSample.zip
>
>
> When a window or dialog is opened which has an icon, after it is closed it 
> cannot be garbage collected because a reference is retained to it through the 
> icon.  Removing the icon resolves the issue.
> As far as I've investigated, the issue appears to the in the 
> ImageListenerList which each Image contains.  I've done a heapdump of my 
> application and used the IBM HeapAnalyzer which shows this list containing a 
> reference to the window/dialog through the ImageViewSkin, but I don't know 
> the Pivot internals well enough to see where or how it should be released.
> I'll attach a simple test application to show the issue.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to