Passing Large Collections from Java to JavaScript using WebEngine & JSObject

I’m attempting to pass a large collection of objects from Java to JavaScript using JavaFx’s WebEngine & JSObject, However i’m running into an issue where not all the objects appear to be passed over to JavaScript. When I create a List of 100,000 objects and then try to iterate through the list in the JS side, the iteration stops short (the exact location varies but I’ve seen it stop after 4,000 or 35,000). When I try to directly access elements after the stop index, they are all returned as undefined. The size() of my list is 100,000 on the js side before the iteration (although it may not represent the actual backing array size from the conversion) and I’m not seeing any errors in my console.
My initial thoughts are that I might be running into memory limitations, but hopefully I’m just doing something dumb. I need this to work on Collections up to 1 million in size containing objects with 10-15 fields (Double, Float, String).

The code I used is below and I ran using JDK 1.8.0_141. Thanks in advance!

TestApp.java

public class TestApp extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {
        StackPane root = new StackPane();

        WebView webView = new WebView();
        webView.getEngine().getLoadWorker().stateProperty().addListener((obs, oldVal, newVal) -> {
            if(newVal == Worker.State.SUCCEEDED) {
                webView.getEngine().setJavaScriptEnabled(true);
                JSObject jsObject = (JSObject) webView.getEngine().executeScript("window");
                jsObject.setMember("bridge", new Bridge());
            }
        });
        URL url = TestApp.class.getResource("test.html");
        webView.getEngine().load(url.toString());

        WebConsoleListener.setDefaultListener(new WebConsoleListener() {
            @Override
            public void messageAdded(WebView webView, String message, int lineNumber, String sourceId) {
                System.out.println("Console: [" + sourceId + ":" + lineNumber + "] " + message);
            }
        });

        root.getChildren().add(webView);
        Scene scene = new Scene(root, 300, 300);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

    public class Bridge {
        public List<Model> getModelList() {
            System.out.println("Loading Models...");
            List<Model> modelList = new ArrayList<>();
            for(int i = 0; i < 100000; i++) {
                Model model = new Model();
                model.id = i;
                modelList.add(model);
            }
            System.out.println("Size: " + modelList.size());
            return modelList;
        }
    }

    private class Model {
        public int id;
    }
}

test.html