我做一个网页静态化的程序,用一个线程以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 结果还是一样报错。纠结了好久了,不知道怎么解决,希望各位帮小弟指点指点,谢谢!
相关推荐
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
JAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.docJAVA内存溢出详解.doc
tomcat内存溢出解决办法,错误信息:java.lang.OutOfMemoryError:PermGen space 参考该文档可快速解决内存溢出的问题,服务器:tomcat
JAVA内存溢出问题总结
完美解决java读取excel内存溢出问题,希望可以帮到大家
java.lang.OutOfMemoryError: PermGen space及其解决方法,解决项目太大tomcat内存溢出
文件名称:MemoryAnalyzer-1.12.0.20210602-win32.win32.x86_64.zip 描述: Eclipse Memory Analyzer是一个快速而功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。 这个版本是支持jdk11的,上一个1.11...
文件名称:MemoryAnalyzer-1.11.0.20201202-win32.win32.x86_64.zip 描述: Eclipse Memory Analyzer是一个快速而功能丰富的Java堆分析器,可帮助您查找内存泄漏并减少内存消耗。 这个版本是支持jdk1.8的,下一个1.12...
Java内存溢出解决办法 加大Tomcat使用Jvm内存(转载) 注重版权 Caused by: java lang OutOfMemoryError: Java heap space 错误原因及解决方法
java内存泄露、溢出检查方法和工具。 步骤: 1,使用linux命令生存堆栈文件 2,用MemoryAnalyzer.exe工具打开 3,根据工具生成的饼状图可以清晰的找出内存泄漏源
MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip 用来分析linux服务器上的hprof文件
京动力节点-Java编程零基础教程-001-编程基础-基本概念-语言、程序、编程.mp4 北京动力节点-Java编程零基础教程-002-编程基础-基本概念-编译.mp4 北京动力节点-Java编程零基础教程-003-编程基础-基本DOS操作.mp4 ...
java内存区域和内存溢出.xmind
Java中OutOfMemoryError(内存溢出)的三种情况及解决办法
33.java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 34.java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该...
其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序中常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部...
【Java面试题】Java内存溢出
ThreadIn.java 接收数据用的线程类 ThreadOut.java 发送数据用的线程类 TypeFile.java 显示文件内容的类 useScanner.java 用Scanner接收用户的输入 第8章 示例描述:本章学习多线程。 enhanceThread.java 一个...
kettle内存溢出(Java heap space)以及解决方法
由于aspose调用的时候有点消耗内存,操作大文件的时候可能会堆溢出,所以请先设置好java虚拟机参数:-Xms512m -Xmx512m(参考值)。一般情况下可以不用设置。如果你在使用过程中有任何问题,请在楼下回复即可,内含...