JSOUPは、ParserErrorオブジェクトが多すぎるため、完全なGCを維持していますか?
質問
JSoupは、HTMLを解析するための非常に便利なツールであり、Crawlerプロジェクトで基本的なUTILとして使用されます。しかし最近、私たちのクローラーはいつも完全なGCをやっていることがありました。
JMAPでオブジェクトをダンプした後、Parseerrorオブジェクトが多すぎることを見つけるのは驚くべきことです。ソースコードを読むことで、それは例外ではなく、オブジェクトです。 HTMLに問題がある場合、多くのエラーを引き起こす可能性があります。したがって、オブジェクトの作成を狂気に防ぐために、制御下にあるはずです。
いくつかの詳細情報は、次のように、解決策を見つけるのに役立つことを願っています。
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 #instances #bytes class name
----------------------------------------------
1: 30110820 1204432800 org.jsoup.parser.ParseError
2: 33076 156025088 [Ljava.lang.Object;
3: 68836 98796360 [C
4: 65808 9778264 <constMethodKlass>
5: 65808 8959520 <methodKlass>
6: 12044 8524088 [B
7: 6424 7447912 <constantPoolKlass>
8: 102203 5494560 <symbolKlass>
9: 6424 4909064 <instanceKlassKlass>
10: 5271 4171032 <constantPoolCacheKlass>
11: 105257 3368224 java.lang.String
解決
@baluscヒントをありがとう!
ソースコードを慎重に読んだ後、トラックエラーが開いており、APIが虚偽を設定することはありません。さらに、トラックエラーは役に立たないことがわかります。私はこれを修正してパッケージを再発行しますが、私はまだこれについて奇妙です、それは間違いですか?
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()));
}
所属していません StackOverflow