Я пытаюсь отменить некоторые сайты, используя htmlunit 2.16. Содержимое веб-сайтов немного тяжелое и имеет страницы около 5000. Я получаю проблему с кучей Java после того, как какая-то страница будет утилизирована. Я выделил -Xms1500m и -Xmx3000m. Но после 30/45 минут он выкидывает java из памяти. Вот мой пример:java.lang.OutOfMemoryError: Java куча пространства с использованием Htmlunit
try (WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38)) {
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setUseInsecureSSL(true);
webClient.getCookieManager().setCookiesEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setPrintContentOnFailingStatusCode(false);
webClient.setCssErrorHandler(new SilentCssErrorHandler());
webClient.getOptions().setAjaxController(new NicelyResynchronizingAjaxController());
// Get 1st page Data
HtmlPage currentPage = webClient.getPage("www.example.com");
for (int i = 0; i < 5000; i++) {
try {
HtmlElement next = (HtmlElement) currentPage
.getByXPath("//span[contains(text(),'Next')]")
.get(0);
currentPage = next.click();
webClient.waitForBackgroundJavascript(10000);
System.out.println("Got data: " + currentPage.asXml());
} catch (Exception e) {
e.printStackTrace(System.err);
}
}
} catch (Exception e) {
e.printStackTrace(System.err);
}
Как мы видим, я нажимаю на следующую кнопку, чтобы получить контент. У меня также есть webClient.close()
. Может ли кто-нибудь столкнуться с подобной проблемой? У htmlunit есть утечка памяти?
@SeanBright Извините, о typo :) – Sthita
@SeanBright Спасибо за редактирование, но нам нужно добавить наконец {webClient.close();}. Это действительно важно. – Sthita
он обрабатывается автоматически, используя [try-with-resources] (https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html) –