Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.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 htmlunit内存泄漏_Java_Htmlunit - Fatal编程技术网

Java htmlunit内存泄漏

Java htmlunit内存泄漏,java,htmlunit,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.n

内存将随着每个循环周期而增加。知道为什么吗

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

    }

提前感谢

JVM并不热衷于尽快释放数据。 如果您给vm240mb进行分配,那么在您看到垃圾收集器为自己的钱做一些事情之前,它将接近该值。 继续此测试,直到遇到OutOfMemory错误。 如果是这样,HtmlUnit库中可能存在漏洞。

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

您需要调用

webClient.closeAllWindows()
在完成page之后,在循环中

显然,上述方法在HtmlTit和HtmlTit的较新版本中被弃用 应改用webClient.close。

试试看

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

它可能会对您有所帮助。

因为版本2.16 closeAllWindows已被弃用,而版本2.21已被删除。 现在你可以打电话了

webClient.close();

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

查看@Daarin answer!此方法现已弃用,在2.16及更高版本中应更改为webClient.close