java中有没有好的方法释放内存?除了System.gc()以外。

publicclassowlcount{publicstaticvoidmain(String[]args)throwsException{System.out.prin... public class owlcount
{
public static void main(String []args) throws Exception
{
System.out.println("owl") ;
String path="D:\\本体运行数据和结果\\owl\\owl1";
FileWriter bw = new FileWriter("D:\\本体运行数据和结果\\owlresult1individual.txt");
File dir = new File(path);
String children[] = dir.list();
System.out.println("ok");
System.out.println(children.length);
for(int i=0;i<children.length;i++)
{

if(i/800==1||i/800==2||i/800==3||i/800==4||i/800==5||i/800==6||i/800==7||i/800==8||i/800==9||i/800==10||i/800==11||i/800==12||i/800==13||i/800==14||i/800==15||i/800==16||i/800==17||i/800==18||i/800==19||i/800==20||i/800==21||i/800==22||i/800==23||i/800==24||i/800==25)
{
System.gc();
}
int countclass=0;
int countproperty=0;
int countindividual=0;
String filename=children[i];
System.out.println(filename);
String folderpath = "file:"+path+"\\"+children[i];
OntModel ontmodel=ModelFactory.createOntologyModel();
ontmodel.read(folderpath);

try{
for(Iterator<Individual>m=ontmodel.listIndividuals();m.hasNext();)
{

Individual oc2=m.next();
System.out.println(oc2.getLocalName());
System.out.println("individual");
countindividual++;
}
}catch(Exception e)
{
e.printStackTrace();
}
String content=filename+" individual "+countindividual;
bw.write(content);
bw.write("\r\n"); //换行
bw.flush();

}
System.out.println("ok");
bw.close();

}

请问怎么才能读入取值超过一万个文件呢?总是产生内存不足的错误!
展开
 我来答
小狂中E
2013-12-03 · TA获得超过1418个赞
知道大有可为答主
回答量:1514
采纳率:66%
帮助的人:1026万
展开全部
jvm自动进行垃圾收集的,你根本不用主动调用System.gc,即便调用了也不会立即进行垃圾收集
内存不足说明你的代码有问题,你得自己将需要大块内存占用的代码分解成即时使用即时处理,这也是为啥读文件在java大多使用流,而不是让你把整个文件读入。
你的OntModel应该是打开InputStream,然后一行或一块数据的循环处理
乌微月2S
2013-12-03 · TA获得超过5037个赞
知道大有可为答主
回答量:5361
采纳率:42%
帮助的人:2885万
展开全部
没有更好的办法,通常也不用手动gc的。
没什么实际的意义,不知道你处理的文件多大啊。内存不足不是由于文件多没有gc造成的。
而是由于你jvm的内存不够大造成的,你调整一下jvm的启动参数吧,把内存加大。
但是如果你的文件过大,还是处理不了的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-12-03
展开全部
因为你的JVM内存不够,而Jvm内存依靠物理内存,物理内存都不够的话,那是不可能实现你这想法的。不要想着读入一万个文件,而是应该多想想怎么优化。通过配置文件可以加大一点Jvm内存这是可以做的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友b8678e2
2013-12-03 · TA获得超过693个赞
知道小有建树答主
回答量:309
采纳率:0%
帮助的人:159万
展开全部
每读完一个文件关了不就得了
追问
但是我有几十万个,不可能手动做完吧!
追答
恩?你不是用代码读的吗?读完了用代码关上呗,不用手动啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式