Java Jsoup由于ParserError对象太多而保留完整GC?
Jsoup是解析html的一个非常方便的工具,在我们的crawler项目中用作基本的util。但最近我发现我们的爬虫有时总是做完全GC 在jmap转储对象之后,我惊奇地发现ParseError对象太多了。通过阅读源代码,它不是一个例外,而是一个对象。当html出现问题时,可能会导致很多错误。所以应该控制它,防止疯狂地创建对象 下面是一些详细信息,希望能帮助您找到解决方案Java Jsoup由于ParserError对象太多而保留完整GC?,java,jsoup,Java,Jsoup,Jsoup是解析html的一个非常方便的工具,在我们的crawler项目中用作基本的util。但最近我发现我们的爬虫有时总是做完全GC 在jmap转储对象之后,我惊奇地发现ParseError对象太多了。通过阅读源代码,它不是一个例外,而是一个对象。当html出现问题时,可能会导致很多错误。所以应该控制它,防止疯狂地创建对象 下面是一些详细信息,希望能帮助您找到解决方案 java.lang.Thread.State: RUNNABLE at org.jsoup.parser
java.lang.Thread.State: RUNNABLE
at org.jsoup.parser.Tokeniser.error(Tokeniser.java:211)
at org.jsoup.parser.TokeniserState$47.read(TokeniserState.java:1170)
at org.jsoup.parser.Tokeniser.read(Tokeniser.java:42)
at org.jsoup.parser.TreeBuilder.runParser(TreeBuilder.java:101)
at org.jsoup.parser.TreeBuilder.parse(TreeBuilder.java:53)
at org.jsoup.parser.Parser.parse(Parser.java:24)
at org.jsoup.Jsoup.parse(Jsoup.java:44)
num#实例#字节类名
----------------------------------------------
1:30110820 1204432800 org.jsoup.parser.ParseError
2:33076 156205088[Ljava.lang.Object;
3:68836986360[C]
4: 65808 9778264
5: 65808 8959520
6:120448524088[B]
7: 6424 7447912
8: 102203 5494560
9: 6424 4909064
10: 5271 4171032
11:105257 3368224 java.lang.String
@BalusC谢谢你的提示
仔细阅读源代码后,我发现trackErrors是开放的,没有API将其设置为false,而且trackErrors是无用的。
我修复了这个并重新发布了这个包,但是我仍然对此感到奇怪,这是一个错误吗
code1:
private boolean trackErrors = true;
code2:
void error(TokeniserState state) {
if (trackErrors)
errors.add(new ParseError("Unexpected character in input", reader.current(), state, reader.pos()));
}
我已经向Jsoup的作者发送了电子邮件,但到目前为止还没有收到回复。可能是
code1:
private boolean trackErrors = true;
code2:
void error(TokeniserState state) {
if (trackErrors)
errors.add(new ParseError("Unexpected character in input", reader.current(), state, reader.pos()));
}