在循环中实例化FileReader而没有错误的Java堆空间

时间:2015-12-28 09:45:07

标签: java document filereader

我正在尝试实现FileReader,为它提供一个while循环内文件的String路径 问题是30个文件后,我收到错误

  

java.lang.OutOfMemoryError:Java堆空间

路径动态地赋予循环内的fileReaders:

DocumentBuilder doc= DocumentBuilderFactory.newInstance().newDocumentBuilder();
while (Index < Events.size() ) {
  String FileName = getFileName(canal,Date,time);
  Doc =doc.parse(new File(Deposit+File.separator+FileName));
  FileReader fR = new FileReader(Deposit+File.separator+FileName);
  PlaylistString =FileCopyUtils.copyToString(fR);
  if(Doc!=null && PlaylistString.contains(some_text)){
  // Some treatment **********
  }

}

此处每次迭代的FileName都会更改

我想找到一种避免出现内存不足错误的方法 我试过fR.close()和System.gc(),但我仍然有错误 有没有人有想法?

1 个答案:

答案 0 :(得分:1)

有人持有对FileReader对象或其他对象的引用。 (顺便说一句:你必须关闭FileReader,寻找try-with-resource以便于处理)不一定是FileReader的问题,它也可能是你的程序中保留(引用)的另一个对象。

尝试使用VisualVM(或者YourKit,不是免费的)分析器来确定内存泄漏。