我从服务器检索大约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();
}
}