在主函数的循环中,创建一个ReadNodesEdges类对象并处理,当进入下次循环后前一项创建的对象不是应该会被自动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; } }
释放container 试试 。。
debug看一下是在第几层循环里面溢出的,找一下具体溢出的原因,因为不了解你的那个包,不晓得里面做了什么操作
释放container 试试 。。
回复 @Barret_Guo:这个类我用的它自带的demo写的代码,里面并没有什么close之类的方法。。。感觉无解了那么问题应该也只能在这个工具类了。。。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。