java - 未初始化的对象与新对象

标签 java object hashmap initialization out-of-memory

这些代码片段有何不同:

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/

相关文章:

java - 可序列化类中包含的对象类型枚举的序列化

java.lang.String 无法转换为 [Ljava.lang.Object;

javascript - 测试嵌套 JavaScript 对象键是否存在

string - 同构字符串

java - 通过 servletvideo java 查看 flv 视频

java - 主线程退出时程序终止?

java - 在 Java 中按值对 Map 进行排序

java - 将 HashMap 与对象进行比较

java - 如何从 eclipse 获取 .java 文件

java - 在云存储等对象之间共享对象中列表的元素(标准库)