HtmlUnit似乎不会关闭webclient中的窗口,从而造成内存泄漏.我正在尝试使用HtmlUnit获取一个页面并将其传递给JSoup进行解析.我知道JSoup可以连接到一个页面,但我需要使用这种方法,因为我需要在解析它们之前在某些站点上保持登录会话.
这是代码:
import java.io.IOException;
import java.net.MalformedURLException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
public class HtmlUnitLeakTest {
public static void main(String args[]) throws FailingHttpStatusCodeException, MalformedURLException, IOException{
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnFailingStatusCode(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setCssEnabled(false);
for(int i = 0; i < 500; i++){
HtmlPage page = webClient.getPage("http://www.stackoverflow.com");
Document doc = Jsoup.parse(page.asXml());
webClient.closeAllWindows();
System.out.println(i);
if((i % 5 == 0)){
System.out.println(i);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
随着这个运行,内存不断攀升,在我的调试屏幕中,我可以看到所有窗口仍然在webclient下被引用而未关闭.
我已经看到这个代码是假设关闭这些窗口:
List<WebWindow> windows = webclient.getWebWindows();
for (WebWindow ww : windows) …Run Code Online (Sandbox Code Playgroud) 我已经看到了一些关于此的问题,但似乎无法深究它.
我有一个Play Framework 2.3.7(Activator 1.2.12)站点,当我在开发模式下运行它时一切正常.当我在生产模式下启动时,我收到以下错误:
[app] $ start
[info] Wrote C:\Users\App\git\website2.0\target\scala-2.10\app_2.10-1.0-
SNAPSHOT.pom
[info] Main Scala API documentation to C:\Users\App\git\website2.0\target\scala-
2.10\api...
[info] Compiling 57 Scala sources and 58 Java sources to C:\Users\App\git\websit
e2.0\target\scala-2.10\classes...
[error] C:\Users\App\git\website2.0\target\scala-2.10\twirl\main\views\html\admi
n\shared\foot.template.scala:29: value at is not a member of controllers.Reverse
Assets
[error] Seq[Any](forApp.raw/*1.1*/("""<script data-main=""""),_display_(/*1.21*/
routes/*1.27*/.Assets.at("javascript/admin.js")),forApp.raw/*1.60*/("""" type="t
ext/javascript" src=""""),_display_(/*1.91*/routes/*1.97*/.Assets.at("lib/requir
ejs/require.js")),forApp.raw/*1.135*/(""""></script>
[error]
^
[error] C:\Users\App\git\website2.0\target\scala-2.10\twirl\main\views\html\admi
n\shared\head.template.scala:31: value at is not a member of controllers.Reverse
Assets
[error] <link rel="stylesheet" media="screen" href=""""),_display_(/*3.46*/route
s/*3.52*/.Assets.at("stylesheets/admin.css")),forApp.raw/*3.87*/("""">
[error]
^
[error] C:\Users\App\git\website2.0\app\views\admin\shared\foot.scala.html:1: va
lue at is …Run Code Online (Sandbox Code Playgroud)