2011-12-03 6 views
0

Jsoupは、HTMLを解析し、クローラプロジェクトの基本的なutilのように使用するのに非常に便利なツールです。しかし、最近私たちのクローラは常に完全なGCを行っていたことがわかりました。ParserErrorオブジェクトが多すぎるため、Jsoupは完全なGCを保持していますか?

jmapのことで対象物を投棄した後、私はあまりにも多くのParseErrorのオブジェクトがあることを見つけることは素晴らしいですよ。ソースコードを読むことで、例外ではなくオブジェクトです。 htmlに何らかの問題がある場合、多くのエラーが発生する可能性があります。したがって、オブジェクトを狂気にするのを防ぐために制御下に置く必要があります。

いくつかの詳細情報は以下のように、それが解決策を見つけるためにあなたを助けることを願っています。あなたのヒントのおかげで@BalusC

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 
+0

私はJsoupの著者に電子メールを送ってきましたが、今までは返信がありません。 – passover

+0

可能重複[どのようにJsoupのトークナイザでエラー追跡を無効にするには?](http://stackoverflow.com/questions/8030303/how-do-you-disable-error-tracking-in-jsoups-tokeniser) – BalusC

答えて

0

慎重にソースコードを読んだ後、私はtrackErrorsが開いており、さらに、偽trackErrorsそれを設定するには何の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())); 
    } 
関連する問題