注意:此问题涉及Jsoup 1.6.1
我需要使用Jsoup解析几个文档,但是我注意到一段时间后内存会增加。使用堆转储和内存分析器,我已将问题跟踪到Jsoup的Tokeniser
类,该类存储ArrayList
ParseError
个。在堆转储中,存储了超过500万个ParseError
个对象,每个对象56个字节。
查看源代码,我注意到org.jsoup.parser.Tokeniser
中的一个变量,它允许关闭错误跟踪。在通话流程之后,我看不到任何关闭它的呼叫,尽管有一种方法可以这样做。该类不公开,我被迫修改源代码并从源代码构建它。
是否有我可以调用的方法或我可以设置的属性,以便在Tokeniser
中有效地禁用错误跟踪,而无需修改源代码?
答案 0 :(得分:1)
原来问题不是由Jsoup引起的。它试图解析的文件不是HTML文件而是图像。由于Jsoup不打算检查它是否具有正确类型的文件并依赖于程序员首先检查,这个问题的答案是Jsoup 1.6.1中的,除非你修改了源代码。关闭Jsoup的Tokeniser
类中的错误跟踪确实减少了内存使用量并提高了速度(由于未在ArrayList
中插入许多元素),但不建议修改源代码。如果您遇到此问题,请先检查您自己的代码。 ;)