每个循环周期内存都会增加。知道为什么会这样吗?
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);
}
}
先谢谢
答案 0 :(得分:2)
您需要致电
webClient.closeAllWindows()
完成页面后,在循环中。
PS显然上面的方法在较新版本的HtmlUtit中被弃用了
应该使用webClient.close()
代替。
答案 1 :(得分:1)
JVM并不热衷于尽快释放数据。 如果你给VM 240MB分配,它会接近那个值,然后你就可以看到垃圾收集器为它做了些什么。 继续此测试,直到遇到OutofMemoryError。 如果是这样,可能是HtmlUnit库中的泄漏。
答案 2 :(得分:1)
每次调用webClient.getPage
时,htmlunit
都会为该页面创建一个新窗口。它类似于Web浏览器中的选项卡。
答案 3 :(得分:1)
从版本2.16开始,不推荐使用closeAllWindows(),因为2.21它已被删除。 所以现在你可以打电话给
webClient.close();
关闭客户端并停止javascript执行。
答案 4 :(得分:0)
尝试
protected void closeWebClient(WebClient wc) {
List<WebWindow> windows = wc.getWebWindows();
for (WebWindow wd : windows) {
// wd.getThreadManager().interruptAll();
wd.getJobManager().removeAllJobs();
}
wc.closeAllWindows();
}
它可能对你有帮助。