Details
-
Bug
-
Status: Closed
-
Critical
-
Resolution: Fixed
-
jcs-2.0-beta-1
-
None
Description
Creating a dynamic region via JCS.defineRegion and then destroying it via ComposeCacheManager.free does not fully reclaim all memory when the memory shrinker is enabled.
When shrinking is enabled, the org.apache.commons.jcs.engine.memory.shrinking.ShrinkerThread retains a pointer to CompositeCache which is never reclaimed.
A simple solution would be to have org.apache.commons.jcs.engine.control.CompositeCache.setScheduledExecutorService(ScheduledExecutorService) retain the ScheduledFuture as a field. When CompositeCache.disposed is called, we should call ScheduledFuture.cancel.