[英]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.getPage
, htmlunit
都會為該頁面創建一個新窗口。 它類似於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.