Утечки памяти htmlunit - PullRequest
       2

Утечки памяти htmlunit

2 голосов
/ 02 февраля 2011

Память будет увеличиваться с каждым циклом цикла. Есть идеи, почему?

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 ]

2 голосов
/ 22 сентября 2011

Вам нужно вызвать

webClient.closeAllWindows()

в цикле после того, как вы закончите со страницей.

PS Очевидно, что вышеприведенный метод устарел в новых версиях HtmlUtit и webClient.close() должениспользовать вместо.

1 голос
/ 19 апреля 2017

Начиная с версии 2.16 closeAllWindows () устарела, с версии 2.21 она удалена.Так что теперь вы можете позвонить

webClient.close();

, чтобы закрыть клиент и остановить исключение JavaScript.

1 голос
/ 05 июля 2011

Каждый раз, когда вызывается webClient.getPage, htmlunit создает новое окно для этой страницы. Это похоже на вкладки в веб-браузерах.

1 голос
/ 02 февраля 2011

JVM не стремится освободить данные как можно скорее. Если вы выделите виртуальной машине 240 МБ, она приблизится к этому значению, прежде чем вы сможете увидеть, как сборщик мусора делает что-то за свои деньги. Продолжайте этот тест, пока не столкнетесь с ошибкой OutofMemoryError. Если это так, может быть утечкой в ​​библиотеке HtmlUnit.

0 голосов
/ 05 ноября 2014

Попробуйте

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

Это может помочь вам.

...