循环读取文件导致内存溢出!

Xuan_Li 2016-04-26 02:16:38

在主函数的循环中,创建一个类对象并处理,当进入下次循环后前一项创建的对象不是应该会被自动GC么。打开GC显示后,老年代内存随着每次循环不断加大,到固定位置后报错——“java.lang.OutOfMemoryError: GC overhead limit exceeded”。
求解应该怎么处理问题??

public class Main_test {

public static void main(String[] args) {
File[] FileList = new File("D:/Samples/B_func_binary/").listFiles();// 获取目录下所有子目录对象
for (int i = 0; i < FileList.length; i++) {
if (FileList[i] != null) {
System.out.println(FileList[i].getAbsolutePath());// getAbsolutePath()绝对地址
ReadNodesEdges readNodesEdges = new ReadNodesEdges();
//问题出现在这个类中
readNodesEdges.script("D:/Samples/B_gexf/"+ FileList[i].getName().replaceAll("txt", "gexf"));// getName()文件名
}
}
}

}

class ReadNodesEdges {
public void script(String path) {
//Init a project - and therefore a workspace
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
pc.newProject();
Workspace workspace = pc.getCurrentWorkspace();

//Get controllers and models
ImportController importController = Lookup.getDefault().lookup(ImportController.class);

//Import file
Container container;
try {
File file = new File(path);
container = importController.importFile(file);
container.getLoader().setEdgeDefault(EdgeDefault.DIRECTED); //Force DIRECTED
container.setAllowAutoNode(false); //Don't create missing nodes

} catch (Exception ex) {
ex.printStackTrace();
return;
}

//这行是关键所在,去掉这行则没有溢出,但是也无法读取数据
importController.process(container, new DefaultProcessor(), workspace);

GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel();
importController = null;


}
}
...全文
371 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
爱睡觉的阿狸 2016-04-27
  • 打赏
  • 举报
回复
楼主可以试一下在循环体末尾加上readNodesEdges = null
Xuan_Li 2016-04-26
  • 打赏
  • 举报
回复
ps 将创建对象语句 ReadNodesEdges_new readNodesEdges = new ReadNodesEdges_new(); 移到循环体外仍无法解决问题。

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧