Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jsoup由于ParserError对象太多而保留完整GC?_Java_Jsoup - Fatal编程技术网

Java Jsoup由于ParserError对象太多而保留完整GC?

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

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#实例#字节类名
----------------------------------------------
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()));
    }