htmlunit内存泄漏

时间:2011-02-02 00:30:53

标签: java htmlunit

每个循环周期内存都会增加。知道为什么会这样吗?

public static void main(String p[]) throws IOException {

        WebClient webClient = new WebClient();

        for (int a = 0; a < 100000; a++) {
            HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");
            String pageAsXml = page.asXml();
            System.out.println(pageAsXml);
        }

    }

先谢谢

5 个答案:

答案 0 :(得分:2)

您需要致电

webClient.closeAllWindows()
完成页面后,在循环中

PS显然上面的方法在较新版本的HtmlUtit中被弃用了 应该使用webClient.close()代替。

答案 1 :(得分:1)

JVM并不热衷于尽快释放数据。 如果你给VM 240MB分配,它会接近那个值,然后你就可以看到垃圾收集器为它做了些什么。 继续此测试,直到遇到OutofMemoryError。 如果是这样,可能是HtmlUnit库中的泄漏。

答案 2 :(得分:1)

每次调用webClient.getPage时,htmlunit都会为该页面创建一个新窗口。它类似于Web浏览器中的选项卡。

答案 3 :(得分:1)

从版本2.16开始,不推荐使用closeAllWindows(),因为2.21它已被删除。 所以现在你可以打电话给

webClient.close();

关闭客户端并停止javascript执行。

答案 4 :(得分:0)

尝试

protected void closeWebClient(WebClient wc) {
    List<WebWindow> windows = wc.getWebWindows();
    for (WebWindow wd : windows) {
        // wd.getThreadManager().interruptAll();
        wd.getJobManager().removeAllJobs();
    }
    wc.closeAllWindows();
}

它可能对你有帮助。