0 0

Java程序中Jsoup解析大量html内存溢出,资源没有回收,内存一直增长5

Java程序中Jsoup解析大量html内存溢出,资源没有回收,内存一直增长
最近要改别人写的一个解析html入库的程序,原本没有抽取正文的代码,就自己找了一个放了进去,是根据Jsoup解析写的,运行之后发现Jsoup解析大量html内存溢出,资源没有回收,内存一直增长。设1G的内存也就解析了几十万的页面就崩了。查了半天之后也没找到定位到,具体是哪个参数的内存一直增加也没有查出来,不知道怎么监视。现在是整个程序内存越跑越大,有几百万的页面,跑到几十万程序就崩了,内存1-2G,下面我会把程序和数据库上传一下。库表就3个(mysql).求懂的前辈给看看是哪里写的不对,有什么优化的方案。


Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

这里是解析正文调用的,ArticleTextExtractor.extractContent里调用了Jsoup.parse(String)来解析。
String content = "";
Converter c = new Converter();
		    ArticleTextExtractor extractors = new ArticleTextExtractor();
			JResult res = extractors.extractContent(c.streamToString( new FileInputStream(file)));
			content = res.getText();














2014年9月23日 10:34

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

0 0

是不是file文件流没有关闭

2014年9月26日 16:56
0 0

简单看了下题主的代码,具体不能确定,有以下几个方向:

1. 代码里面使用的是dom的方式做解析,即使是没有内存泄露,也无法承载比较大的并发量;

2. 使用jconole、jprofile或者其他的工具查看下内存,可以设置下在崩溃的时候dump下内存,然后具体查看哪一个对象占的比较多;

3. 占内存比较多的对象,使用完毕后,立即设置为NULL,加速回收的概率;

4. 将新生代的内存设置大一些。

2014年9月24日 13:24

相关推荐

Global site tag (gtag.js) - Google Analytics