[ http://issues.apache.org/jira/browse/IBATIS-171?page=comments#action_12316013 ]
Clinton Begin commented on IBATIS-171: -------------------------------------- This is a very broad implication. First, there is no requirement to ever call clear or remove to reclaim memory used by a hashmap. When the hashmap falls out of scope, the memory will be reclaimed. Second, any maps that do remain in memory are required and used by iBATIS, so we can't go clearing them out. So, unless there is some concrete evidence, then we'll need to close this issue. I did notice in your environment description that you're using a JVM on Solaris with 128 MB or RAM.....perhaps you should look into getting more RAM, as any modern app server + JVM + various frameworks + your app.....you'll be out of RAM before you know it. Cheers, Clinton > Possible Memory Leak > -------------------- > > Key: IBATIS-171 > URL: http://issues.apache.org/jira/browse/IBATIS-171 > Project: iBatis for Java > Type: Bug > Components: Build/Deployment > Versions: 2.1.0 > Environment: OS:Solars10.5 > Hardware:P3 128M RAM,40G HD > Reporter: kevinliu > Priority: Critical > > I'm a China programer.It's very happy for writing this letter to u. > When i had used ibatis 2.0.9b,i met a trouble:my program take a lot of > memory for work to make my solaris halt by memory leak..And then i checked my > program and use profiler to test it,i found some ibatis class maybe has > memory leak at the "hashMap" class. > So i opened the ibatis source code,and found some code as > "\com\ibatis\sqlmap\engine\builder\xml\BaseParser.java" and > "SqlMapExecutorDelegate.java" etc which used one or one more hashmap to store > some data,But they didn't release these hashmap by "remove" or "clear" > statement.I think them take my program to death and eat too many memory. > Please help us who using and loving iBatis..:-) Waiting for your > reply.THX! > > This is the list that some trouble java file in iBatis 2.10 with this > problem: > ---------------------------------------- > \com\ibatis\sqlmap\engine\builder\xml\BaseParser.java' : > \com\ibatis\sqlmap\engine\builder\xml\BaseParser.java(22): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\builder\xml\BaseParser.java(130): public Map > sqlIncludes = new HashMap(); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\cache\CacheModel.java' : > \com\ibatis\sqlmap\engine\cache\CacheModel.java(31): private static final > Map lockMap = new HashMap(); > Found 'hashmap' 1 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\cache\fifo\FifoCacheController.java' : > \com\ibatis\sqlmap\engine\cache\fifo\FifoCacheController.java(19): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\cache\fifo\FifoCacheController.java(42): > this.cache = Collections.synchronizedMap(new HashMap()); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\cache\lru\LruCacheController.java' : > \com\ibatis\sqlmap\engine\cache\lru\LruCacheController.java(19): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\cache\lru\LruCacheController.java(42): > this.cache = Collections.synchronizedMap(new HashMap()); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\cache\memory\MemoryCacheController.java' : > \com\ibatis\sqlmap\engine\cache\memory\MemoryCacheController.java(24): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\cache\memory\MemoryCacheController.java(34): > private Map cache = Collections.synchronizedMap(new HashMap()); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\cache\memory\MemoryCacheLevel.java' : > \com\ibatis\sqlmap\engine\cache\memory\MemoryCacheLevel.java(20): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\cache\memory\MemoryCacheLevel.java(28): private > static Map cacheLevelMap = new HashMap(); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\exchange\MapDataExchange.java' : > \com\ibatis\sqlmap\engine\exchange\MapDataExchange.java(25): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\exchange\MapDataExchange.java(61): map = new > HashMap(); > \com\ibatis\sqlmap\engine\exchange\MapDataExchange.java(79): map = new > HashMap(); > Found 'hashmap' 3 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java' : > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(47): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(82): private > HashMap mappedStatements; > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(83): private > HashMap cacheModels; > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(84): private > HashMap resultMaps; > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(85): private > HashMap parameterMaps; > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(98): > mappedStatements = new HashMap(); > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(99): > cacheModels = new HashMap(); > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(100): > resultMaps = new HashMap(); > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(101): > parameterMaps = new HashMap(); > \com\ibatis\sqlmap\engine\impl\SqlMapExecutorDelegate.java(698): Map map > = new HashMap(); > Found 'hashmap' 10 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\mapping\parameter\BasicParameterMap.java' : > \com\ibatis\sqlmap\engine\mapping\parameter\BasicParameterMap.java(30): > import java.util.HashMap; > \com\ibatis\sqlmap\engine\mapping\parameter\BasicParameterMap.java(44): > private Map parameterMappingIndex = new HashMap(); > \com\ibatis\sqlmap\engine\mapping\parameter\BasicParameterMap.java(89): > Map props = new HashMap(); > Found 'hashmap' 3 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\mapping\result\AutoResultMap.java' : > \com\ibatis\sqlmap\engine\mapping\result\AutoResultMap.java(29): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\mapping\result\AutoResultMap.java(75): Map > propertyMap = new HashMap(); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\mapping\result\BasicResultMap.java' : > \com\ibatis\sqlmap\engine\mapping\result\BasicResultMap.java(253): Map > props = new HashMap(); > \com\ibatis\sqlmap\engine\mapping\result\BasicResultMap.java(329): > uniqueKeys = new HashMap(); > \com\ibatis\sqlmap\engine\mapping\result\BasicResultMap.java(505): > parameterObject = new HashMap(); > Found 'hashmap' 3 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\mapping\result\Discriminator.java' : > \com\ibatis\sqlmap\engine\mapping\result\Discriminator.java(6): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\mapping\result\Discriminator.java(37): > subMaps = new HashMap(); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\mapping\sql\dynamic\elements\SqlTagContext.java' : > \com\ibatis\sqlmap\engine\mapping\sql\dynamic\elements\SqlTagContext.java(21): > import java.util.HashMap; > \com\ibatis\sqlmap\engine\mapping\sql\dynamic\elements\SqlTagContext.java(32): > private HashMap attributes; > \com\ibatis\sqlmap\engine\mapping\sql\dynamic\elements\SqlTagContext.java(45): > attributes = new HashMap(); > Found 'hashmap' 3 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\mapping\sql\dynamic\elements\SqlTagHandlerFactory.java' > : > \com\ibatis\sqlmap\engine\mapping\sql\dynamic\elements\SqlTagHandlerFactory.java(18): > import java.util.HashMap; > \com\ibatis\sqlmap\engine\mapping\sql\dynamic\elements\SqlTagHandlerFactory.java(23): > private static final Map HANDLER_MAP = new HashMap(); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\scope\BaseScope.java' : > \com\ibatis\sqlmap\engine\scope\BaseScope.java(18): import java.util.HashMap; > \com\ibatis\sqlmap\engine\scope\BaseScope.java(25): private HashMap map = > new HashMap(0); > Found 'hashmap' 3 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\scope\RequestScope.java' : > \com\ibatis\sqlmap\engine\scope\RequestScope.java(25): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\scope\RequestScope.java(207): uniqueKeys = > new HashMap(); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\type\JdbcTypeRegistry.java' : > \com\ibatis\sqlmap\engine\type\JdbcTypeRegistry.java(19): import > java.util.HashMap; > \com\ibatis\sqlmap\engine\type\JdbcTypeRegistry.java(32): private static > final Map TYPE_MAP = new HashMap(); > Found 'hashmap' 2 time(s). > ---------------------------------------- > \com\ibatis\sqlmap\engine\type\TypeHandlerFactory.java' : > \com\ibatis\sqlmap\engine\type\TypeHandlerFactory.java(28): private final > Map typeHandlerMap = new HashMap(); > \com\ibatis\sqlmap\engine\type\TypeHandlerFactory.java(30): private final > HashMap typeAliases = new HashMap(); > \com\ibatis\sqlmap\engine\type\TypeHandlerFactory.java(104): > putTypeAlias("hashmap", HashMap.class.getName()); > \com\ibatis\sqlmap\engine\type\TypeHandlerFactory.java(186): map = new > HashMap(); > Found 'hashmap' 6 time(s). > Search complete, found 'hashmap' 52 time(s). (18 files.) -- 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