繁体   English   中英

htmlunit内存泄漏

[英]htmlunit memory leaks

内存将在每个循环周期内增加。 知道为什么吗?

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);
        }

    }

提前致谢

你需要打电话

webClient.closeAllWindows()

页面处理完后循环播放。

PS显然,以上方法在HtmlUtit的较新版本中已弃用,而应使用webClient.close()

由于不推荐使用版本2.16 closeAllWindows(),因此将从2.21起将其删除。 所以现在你可以打电话

webClient.close();

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

JVM不希望尽快释放数据。 如果您给虚拟机分配240MB的空间,它将接近该值,然后您才能看到垃圾收集器为其赚钱。 继续此测试,直到遇到OutofMemoryError。 如果是这样,则HtmlUnit库中可能存在泄漏。

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

尝试

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

它可能会帮助您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM