0 0

不显示删除回复显示所有回复显示星级回复显示得分回复 java内存溢出Exception in thread "Thread-0"java.lang.OutOf3

我做一个网页静态化的程序,用一个线程以URL方式读取一个地址,如果里面还有链接地址就再往里面读,一层层递归,把网页写到不同的html文件中,html文件名为当前时间,用个HashMap保存 <url,fileName>,增加判断保证每个地址只读写一次。循环代码如下:
//url:连接地址,path:保存文件名
public void down(String realmName,URL url,String charsetName,Map<String,String> urlMap,Map <String,String>fileMap,File filePlace,String fileName){
URLConnection conn=null;
InputStream is=null;
BufferedReader br=null;
BufferedWriter bw=null;

try {
conn = url.openConnection();
is=conn.getInputStream();
br=new BufferedReader(new InputStreamReader(is,charsetName));
if(!filePlace.exists()){
filePlace.mkdirs();
}
bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePlace.getPath()+File.separator+fileName)));
String msg=br.readLine();
while(msg!=null){
String ss=msg;
if(hasATag(ss)){ //判断有没有<a href='xxxx'>的地址
ss=ss.replaceAll("\\s+"," ");
ss=cutOutString(ss);
if(ss.indexOf("javascript")==-1){
String fileName2=new Date().getTime()+".html";
URL urlpath=null;
if(ss.startsWith("/")){
urlpath=new URL(realmName+ss);
}else{
urlpath=new URL(realmName+"/"+ss);
}

if(!fileMap.containsKey(urlpath.toString())){
msg=msg.replace(ss, fileName2);
fileMap.put(urlpath.toString(),fileName2);
}else{
msg=msg.replace(ss, fileMap.get(urlpath.toString()));
}
System.out.println(msg);
//System.out.println(fileMap);
if(!urlMap.containsKey(urlpath.toString())){
urlMap.put(url.toString(),filePlace.getPath()+File.separator+fileName);
filePlace=new File(filePlace.getPath()+File.separator);
System.out.println("-----------------");
down(realmName,urlpath,"utf-8",urlMap,fileMap,filePlace,fileName2); 

}
}
}
bw.write(msg);
bw.newLine();
bw.flush();
msg=br.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
if(bw!=null){
bw.flush();
bw.close();
}
if(br!=null){
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}


}
}

读a 地址写出了5000多个html没报任何错误,读b地址写出1200多个的时候就报错,而且每次都报错,我的eclipse内存配置如下-vmargs -Xms64M -Xmx512M -XX:PermSize=64M -XX:MaxPermSize=512M
我试着增加内存到1024M 结果还是一样报错。纠结了好久了,不知道怎么解决,希望各位帮小弟指点指点,谢谢!
2012年3月21日 15:08

1个答案 按时间排序 按投票排序

0 0

eclipse内存配置那是eclipse的
你运行的程序内存配置要写在运行程序的地方。
eclipse中Run Configurations—>Arguments
或者你直接cmd上用java命令跑class文件 java -Xms512M -Xmx512M -XX:PermSize=128M -XX:MaxPermSize=128M 类名

2012年3月21日 16:36

相关推荐

Global site tag (gtag.js) - Google Analytics