这些代码片段有何不同:
Snippet 1: HashMap map1= abc() ;
Snippet 2: HashMap map2= new HashMap();
map2 = abc();
我的应用程序中出现 OutOfMemoryError 错误。这个错误的原因是由于我的代码中执行了 Snippet 1 吗?
编辑:添加了 abc() 的实现
public HashMap abc(){
HashMap rMap = null;
StringBuffer sQuery = new StringBuffer("");
sQuery.append(" SELECT DISTINCT ABC ,DEF, ");
sQuery.append(" XYZ, ID, NAME ");
sQuery.append(" FROM TABLE1");
Query query = new Query( sQuery.toString());
List rList = query.executeSelect();
if (rList != null && rList.size() > 0) {
Iterator listIter = rList.iterator();
Map map = null;
rMap = new HashMap();
while (listIter.hasNext()) {
map = (HashMap) listIter.next();
String key = map.get("ABC") + "%"+ map.get("DEF")+"%"+map.get("XYZ");
if( rMap.containsKey(key)){
LinkedHashMap sMap = (LinkedHashMap) rMap.get(key);
sMap.put(map.get("ID"), map.get("NAME"));
rMap.put(key, sMap);
}else{
LinkedHashMap sMap = new LinkedHashMap();
sMap.put(map.get("ID"), map.get("NAME"));
rMap.put(key, sMap);
}
}
}
return rMap;
}
最佳答案
在 Snippet 2
中,您创建一个额外的实例,该实例有资格在下一条语句中进行垃圾回收。所以基本上它们是相同的,并且不会导致内存泄漏。
尝试运行探查器来检查内存映射或增加堆大小。
关于java - 未初始化的对象与新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31807108/