加载多个页面时,Javafx WebView中的内存使用量激增

加载多个页面时,Javafx WebView中的内存使用量激增,javafx,webview,out-of-memory,Javafx,Webview,Out Of Memory,我在处理Javafx中的WebView时遇到了一个问题。 我的任务管理器中的内存使用率超过了一切,最终导致崩溃 我有一个简单的代码示例来重现问题: import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker; import javafx.scene

我在处理Javafx中的WebView时遇到了一个问题。 我的任务管理器中的内存使用率超过了一切,最终导致崩溃

我有一个简单的代码示例来重现问题:

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class WebViewSample extends Application {

    public boolean cycle = false;

    public static void main(String[] args) { 
        launch(); 
    }

    @Override public void start(Stage primaryStage) {

        WebView webView = new WebView();
        WebEngine engine = webView.getEngine();

        engine.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() { 
            @Override
            public void changed(ObservableValue<? extends Worker.State> obs, Worker.State old, Worker.State current) {

                if(javafx.concurrent.Worker.State.SUCCEEDED == current) {
                    if(cycle) {
                        engine.load("http://www.google.com");
                    } else {
                        engine.load("http://www.yahoo.com");
                    }
                    cycle = !cycle;
                }
            }
        });

        engine.load("http://www.google.com");
        primaryStage.setScene(new Scene(webView));
        primaryStage.show();
    }
}
导入javafx.application.application;
导入javafx.beans.value.ChangeListener;
导入javafx.beans.value.observeValue;
导入javafx.concurrent.Worker;
导入javafx.scene.scene;
导入javafx.scene.web.WebEngine;
导入javafx.scene.web.WebView;
导入javafx.stage.stage;
公共类WebViewSample扩展应用程序{
公共布尔循环=false;
公共静态void main(字符串[]args){
发射();
}
@覆盖公共无效开始(阶段primaryStage){
WebView WebView=新建WebView();
WebEngine=webView.getEngine();
engine.getLoadWorker().stateProperty().addListener(新的ChangeListener(){
@凌驾
公共空隙改变(可观察值
2016年7月22日编辑:
显然这在JDK 9中是固定的:


我们还看到了使用JDK1.8.092的类似行为

仅仅在这两个页面之间交替使用就会导致内存使用率无法控制地攀升

第1页:

<head></head>
<body>
  <h1>Page 1</h1>
  <script>
    window.location.href = "page2.html";
  </script>
</body>

第1页
window.location.href=“page2.html”;
第2页:

<head></head>
<body>
  <h1>Page 2</h1>
  <script>
    window.location.href = "page1.html";
  </script>
</body>

第2页
window.location.href=“page1.html”;

我们目前无法找到任何解决此明显内存泄漏的方法。

@jewelsea公平地说,OP实际上没有提出任何问题。他们表示“如果这是因为我的示例中的错误,我真的不是舒尔”,对此,我已确认我们也看到了此问题,也就是说,不太可能是他们的错误。