簡體   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