Java htmlunit内存泄漏
内存将随着每个循环周期而增加。知道为什么吗Java htmlunit内存泄漏,java,htmlunit,Java,Htmlunit,内存将随着每个循环周期而增加。知道为什么吗 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.n
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);
}
}
提前感谢JVM并不热衷于尽快释放数据。 如果您给vm240mb进行分配,那么在您看到垃圾收集器为自己的钱做一些事情之前,它将接近该值。 继续此测试,直到遇到OutOfMemory错误。 如果是这样,HtmlUnit库中可能存在漏洞。每次调用webClient.getPage时,HtmlUnit都会为该页面创建一个新窗口。它类似于web浏览器中的选项卡。您需要调用
webClient.closeAllWindows()
在完成page之后,在循环中
显然,上述方法在HtmlTit和HtmlTit的较新版本中被弃用
应改用webClient.close。试试看
protected void closeWebClient(WebClient wc) {
List<WebWindow> windows = wc.getWebWindows();
for (WebWindow wd : windows) {
// wd.getThreadManager().interruptAll();
wd.getJobManager().removeAllJobs();
}
wc.closeAllWindows();
}
它可能会对您有所帮助。因为版本2.16 closeAllWindows已被弃用,而版本2.21已被删除。 现在你可以打电话了
webClient.close();
关闭客户端并停止javascript执行。查看@Daarin answer!此方法现已弃用,在2.16及更高版本中应更改为webClient.close