[英]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.