[ 
http://issues.apache.org/jira/browse/JCR-625?page=comments#action_12447853 ] 
            
Jukka Zitting commented on JCR-625:
-----------------------------------

I don't really like the idea of having to use a separate thread to do this. 
Can't the various caches just call the CacheManager whenever an object is 
placed in the cache. You can amortize the performance hit by requesting 
reallocation only every N caching operations. This structure would avoid the 
need to manage a separate thread.

Also, it would be cleaner if you passed around a factory object instead of the 
CacheManager. That would make it much easier to plug in alternative caching 
behaviours. Something like this:

    public interface ItemStateCacheFactory {

        ItemStateCache newItemStateCache();

    }

and:

    public class ManagedMLRUItemStateCacheFactory {

        private final CacheManager manager;

        public ManagedCacheFactory(CacheManager manager) {
            this.manager = manager;
        }

        public ItemStateCache newItemStateCache() {
            ItemStateCache cache = new MLRUItemStateCache();
            manager.add(cache);
            return cache;
        }

    }


> Memory is not freed up when jackrabbit-server war is redeployed in tomcat
> -------------------------------------------------------------------------
>
>                 Key: JCR-625
>                 URL: http://issues.apache.org/jira/browse/JCR-625
>             Project: Jackrabbit
>          Issue Type: Bug
>          Components: core
>         Environment: No released version is affected, only trunk: svn 
> revision 471800.
>            Reporter: Marcel Reutegger
>            Priority: Minor
>         Attachments: cacheManager3.txt
>
>
> This bug was introduced with the new CacheManager feature. See JCR-619.
> The CacheManager starts a new background thread which optimizes memory 
> distribution every second accross the various caches. When a jackrabbit 
> repository is shutdown, this background thread is still running and prevents 
> the GC from collecting the classloader when jackrabbit is deployed in a web 
> application.
> Steps to reproduce:
> 1) build jackrabbit and jcr-server from trunk and deploy into a tomcat
> 2) touch the web.xml file of the jcr-server web app (this will force a 
> redeployment)
> After step 2 two things may happen. Either:
> - The memory consumption increases because the CacheManager thread is not 
> shutdown
> or
> - The CacheManager thread dies unexpectedly with a NullPointerException:
> Exception in thread "org.apache.jackrabbit.core.state.CacheManager" 
> java.lang.NullPointerException
>         at 
> org.apache.jackrabbit.core.state.CacheManager.run(CacheManager.java:90)
>         at java.lang.Thread.run(Unknown Source)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to