BufferedWriter和OutOfMemoryError:Java堆空间

时间:2015-08-26 09:28:57

标签: java multithreading hashmap out-of-memory bufferedwriter

我从服务器检索大约500个对象的一些数据并将其存储在HashMap中,当收集了500个对象的所有数据时,我曾经使用BuffrerdWriter将其写为简单的纯文本文件。但是我只在最后一个帖子中得到OutOfMemoryError。

所以我决定分解数据收集而不是收集500个对象的数据,我开始在一个循环填充哈希映射的本地一次收集50个对象的数据,这样它就可以在下一次迭代中被垃圾收集并保存BufferedWriter一直打开,而不是一次打开和关闭它。

现在我在更多线程中获取OutofMemoryError,而不是仅仅在最后一个线程中。

注意:应用程序是多线程的,有5-10个线程,每个线程收集500个对象的数据,并在其调用方法中拥有自己的BUfferedWriter。

public String call(){
    BufferedWriter writer = new BufferedWriter(new FileWriter("filename"));

    try {
        List<String[]> objectList = sPoller.getobjects(Keyword.HTTP);
        for(String[] objectNameArray : objectList){
            if(objectNameArray.length>0){
                HashMap<String, TreeMap<Long, ArrayList<String>>> statMap = new HashMap<String, TreeMap<Long, ArrayList<String>>>();
                HashMap<String, String> objectMap = sPoller.getobjectNamesIDMap();

                /** 
                *code for getting data from server
                *
                **/ 

                /** 
                *code for populating hashmaps
                *
                **/ 

            }
            writeHTTPStats(statMap);
        }
    }catch(Exception e){
            e.printStackTrace();
    }finally{
        writer.closeStream();
    }
}

0 个答案:

没有答案