Very slow adding to PropertyCollection - eventually a GC overhead limit exceeded

Hi again. When creating a new customer in my system, I need to clone report defaults (Repdefs) for my new customer. I wrote code like this:

        List<Repdefs> listRepdefs = dataManager.load(Repdefs.class)
                .query("select e from custfm_Repdefs e where e.id.cus = -1")
                .view("_local")
                .list();

        listRepdefs.stream().forEach(repdefs -> {
            repdefs.setCus(getEditedEntity());
            Repdefs r = dataContext.merge(repdefs);
            repdefsDc.getMutableItems().add(r);
        });

The first part executes the query to load the default Repdef entities from the database. The second part is intended to update the Customer ID links to my new customer record, merge them into the dataContext, then add them to the PropertyCollection to be displayed on screen:

    <data>
        <instance id="customersDc" class="com.paslists.custfm.entity.Customers" view="customers-view">
            <loader id="customersDl"/>
            <collection id="repdefsDc" property="repdefs"/>
            <collection id="mergedelivDc" property="mergedeliv"/>
        </instance>
                <table id="tblRepdefs" dataContainer="repdefsDc" editable="true" width="100%">
                    <actions>
                        <action id="create" type="create" icon="CREATE_ACTION"/>
                        <action id="edit" type="edit" icon="EDIT"/>
                        <action id="remove" type="remove" icon="REMOVE"/>
                    </actions>
                    <columns>
                        <column id="reporder" caption="Rep Seq" editable="true"/>
                        <column id="repnum" caption="Rep Num" editable="true"/>
                        <column id="report" caption="Report" editable="true"/>
                        <column id="function" caption="Function" editable="true" optionsContainer="functionsDc"
                                captionProperty="funDesc"/>
                        <column id="printer" caption="Printer" editable="true"/>
                    </columns>
                    <rowsCount/>
                    <buttonsPanel id="buttonsPanel"
                                  alwaysVisible="true">
                        <button id="createBtn"
                                action="tblRepdefs.create" icon="CREATE_ACTION"/>
                        <button id="editBtn"
                                action="tblRepdefs.edit" icon="EDIT"/>
                        <button id="removeBtn"
                                action="tblRepdefs.remove" icon="REMOVE"/>
                        <button id="defaultBtn" caption="Default" />
                    </buttonsPanel>
                </table>

There are 229 Repdefs entities being created. They load very quickly. However, when I go to merge them into the dataContext and add them to the collection, I get this in the logs:

15:29:33.708 ERROR com.haulmont.cuba.web.AppUI             - Error handling exception
Original exception:
com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method click in com.vaadin.shared.ui.button.ButtonServerRpc
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:157)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107)
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.reflect.InvocationTargetException
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153)
	... 38 more
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at com.haulmont.bali.events.EventHub.newListenersArray(EventHub.java:182)
	at com.haulmont.bali.events.EventHub.subscribe(EventHub.java:64)
	at com.haulmont.cuba.gui.model.impl.InstanceContainerImpl.addItemPropertyChangeListener(InstanceContainerImpl.java:116)
	at com.haulmont.cuba.gui.components.data.options.ContainerOptions.<init>(ContainerOptions.java:56)
	at com.haulmont.cuba.web.gui.components.table.WebTableFieldFactory.getOptions(WebTableFieldFactory.java:156)
	at com.haulmont.cuba.gui.components.factories.AbstractFieldFactory.createField(AbstractFieldFactory.java:50)
	at com.haulmont.cuba.web.gui.components.table.WebTableFieldFactory.createField(WebTableFieldFactory.java:75)
	at com.haulmont.cuba.web.widgets.CubaTable.getPropertyValue(CubaTable.java:220)
	at com.vaadin.v7.ui.Table.parseItemIdToCells(Table.java:2355)
	at com.vaadin.v7.ui.Table.getVisibleCellsNoCache(Table.java:2203)
	at com.vaadin.v7.ui.Table.refreshRenderedCells(Table.java:1746)
	at com.vaadin.v7.ui.Table.refreshRowCache(Table.java:2654)
	at com.haulmont.cuba.web.widgets.CubaTable.refreshRowCache(CubaTable.java:1017)
	at com.vaadin.v7.ui.Table.containerItemSetChange(Table.java:4556)
	at com.haulmont.cuba.web.gui.components.table.TableDataContainer.fireItemSetChanged(TableDataContainer.java:165)
	at com.haulmont.cuba.web.gui.components.table.TableDataContainer.datasourceItemSetChanged(TableDataContainer.java:278)
	at com.haulmont.cuba.web.gui.components.table.TableDataContainer$$Lambda$434/336289300.accept(Unknown Source)
	at com.haulmont.bali.events.EventHub.publish(EventHub.java:170)
	at com.haulmont.cuba.gui.components.data.table.ContainerTableItems.containerCollectionChanged(ContainerTableItems.java:89)
	at com.haulmont.cuba.gui.components.data.table.ContainerTableItems$$Lambda$431/2032373190.accept(Unknown Source)
	at com.haulmont.bali.events.EventHub.publish(EventHub.java:170)
	at com.haulmont.cuba.gui.model.impl.CollectionContainerImpl.fireCollectionChanged(CollectionContainerImpl.java:187)
	at com.haulmont.cuba.gui.model.impl.CollectionPropertyContainerImpl.lambda$getMutableItems$0(CollectionPropertyContainerImpl.java:71)
	at com.haulmont.cuba.gui.model.impl.CollectionPropertyContainerImpl$$Lambda$551/406577434.accept(Unknown Source)
	at com.haulmont.cuba.gui.model.impl.ObservableList.fireCollectionChanged(ObservableList.java:59)
	at com.haulmont.cuba.gui.model.impl.ObservableList.add(ObservableList.java:81)
	at com.paslists.custfm.web.customers.CustomersEdit.lambda$onDefaultBtnClick$0(CustomersEdit.java:92)
	at com.paslists.custfm.web.customers.CustomersEdit$$Lambda$549/549730947.accept(Unknown Source)
	at java.util.Vector$VectorSpliterator.forEachRemaining(Vector.java:1440)
	at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
	at com.paslists.custfm.web.customers.CustomersEdit.onDefaultBtnClick(CustomersEdit.java:89)
	at com.paslists.custfm.web.customers.CustomersEdit$$Lambda$539/2030815703.accept(Unknown Source)

Exception in handlers:
java.lang.InternalError: BMH.reinvoke=Lambda(a0:L/SpeciesData<L>,a1:L,a2:L,a3:L)=>{
    t4:L=MethodHandleImpl.array();
    t5:L=Species_L.argL0(a0:L);
    t6:L=MethodHandle.invokeBasic(t5:L,a1:L,a2:L,a3:L,t4:L);t6:L}
	at java.lang.invoke.MethodHandleStatics.newInternalError(MethodHandleStatics.java:127)
	at java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:660)
	at java.lang.invoke.LambdaForm.prepare(LambdaForm.java:635)
	at java.lang.invoke.MethodHandle.<init>(MethodHandle.java:461)
	at java.lang.invoke.BoundMethodHandle.<init>(BoundMethodHandle.java:58)
	at java.lang.invoke.BoundMethodHandle$Species_L.<init>(BoundMethodHandle.java:211)
	at java.lang.invoke.BoundMethodHandle$Species_L.copyWith(BoundMethodHandle.java:228)
	at java.lang.invoke.MethodHandle.asCollector(MethodHandle.java:1002)
	at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.<init>(MethodHandleImpl.java:460)
	at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.<init>(MethodHandleImpl.java:454)
	at java.lang.invoke.MethodHandleImpl.makeVarargsCollector(MethodHandleImpl.java:445)
	at java.lang.invoke.MethodHandle.setVarargs(MethodHandle.java:1325)
	at java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1670)
	at java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(MethodHandles.java:1617)
	at java.lang.invoke.MethodHandles$Lookup.getDirectMethodForConstant(MethodHandles.java:1802)
	at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1751)
	at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
	at com.haulmont.cuba.web.exception.ExceptionDialog.<init>(ExceptionDialog.java:151)
	at com.haulmont.cuba.web.exception.ExceptionDialog.<init>(ExceptionDialog.java:85)
	at com.haulmont.cuba.web.exception.DefaultExceptionHandler.showDialog(DefaultExceptionHandler.java:85)
	at com.haulmont.cuba.web.exception.DefaultExceptionHandler.handle(DefaultExceptionHandler.java:71)
	at com.haulmont.cuba.web.exception.ExceptionHandlers.handle(ExceptionHandlers.java:120)
	at com.haulmont.cuba.web.AppUI.error(AppUI.java:570)
	at com.vaadin.server.LegacyCommunicationManager.handleConnectorRelatedException(LegacyCommunicationManager.java:426)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:434)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107)
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at jdk.internal.org.objectweb.asm.ClassWriter.<init>(ClassWriter.java:639)
	at java.lang.invoke.InvokerBytecodeGenerator.classFilePrologue(InvokerBytecodeGenerator.java:307)
	at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCodeBytes(InvokerBytecodeGenerator.java:634)
	at java.lang.invoke.InvokerBytecodeGenerator.generateCustomizedCode(InvokerBytecodeGenerator.java:618)
	at java.lang.invoke.LambdaForm.compileToBytecode(LambdaForm.java:654)
	at java.lang.invoke.LambdaForm.prepare(LambdaForm.java:635)
	at java.lang.invoke.MethodHandle.<init>(MethodHandle.java:461)
	at java.lang.invoke.BoundMethodHandle.<init>(BoundMethodHandle.java:58)
	at java.lang.invoke.BoundMethodHandle$Species_L.<init>(BoundMethodHandle.java:211)
	at java.lang.invoke.BoundMethodHandle$Species_L.copyWith(BoundMethodHandle.java:228)
	at java.lang.invoke.MethodHandle.asCollector(MethodHandle.java:1002)
	at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.<init>(MethodHandleImpl.java:460)
	at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.<init>(MethodHandleImpl.java:454)
	at java.lang.invoke.MethodHandleImpl.makeVarargsCollector(MethodHandleImpl.java:445)
	at java.lang.invoke.MethodHandle.setVarargs(MethodHandle.java:1325)
	at java.lang.invoke.MethodHandles$Lookup.getDirectMethodCommon(MethodHandles.java:1670)
	at java.lang.invoke.MethodHandles$Lookup.getDirectMethodNoSecurityManager(MethodHandles.java:1617)
	at java.lang.invoke.MethodHandles$Lookup.getDirectMethodForConstant(MethodHandles.java:1802)
	at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1751)
	at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
	at com.haulmont.cuba.web.exception.ExceptionDialog.<init>(ExceptionDialog.java:151)
	at com.haulmont.cuba.web.exception.ExceptionDialog.<init>(ExceptionDialog.java:85)
	at com.haulmont.cuba.web.exception.DefaultExceptionHandler.showDialog(DefaultExceptionHandler.java:85)
	at com.haulmont.cuba.web.exception.DefaultExceptionHandler.handle(DefaultExceptionHandler.java:71)
	at com.haulmont.cuba.web.exception.ExceptionHandlers.handle(ExceptionHandlers.java:120)
	at com.haulmont.cuba.web.AppUI.error(AppUI.java:570)
	at com.vaadin.server.LegacyCommunicationManager.handleConnectorRelatedException(LegacyCommunicationManager.java:426)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:434)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)

15:29:41.401 ERROR com.haulmont.cuba.web.log.AppLog        - Exception: 
java.lang.OutOfMemoryError: GC overhead limit exceeded
15:29:52.046 ERROR c.h.c.web.sys.CubaApplicationServlet    - Unable to show error page
java.lang.OutOfMemoryError: GC overhead limit exceeded
15:35:16.886 ERROR com.haulmont.cuba.web.log.AppLog        - Exception: 
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.util.concurrent.FutureTask.report(FutureTask.java:122) ~[na:1.8.0_201]
	at java.util.concurrent.FutureTask.get(FutureTask.java:192) ~[na:1.8.0_201]
	at com.vaadin.server.VaadinSession$FutureAccess.get(VaadinSession.java:102) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at com.vaadin.server.VaadinService.runPendingAccessTasks(VaadinService.java:2021) [vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at com.vaadin.server.VaadinSession.unlock(VaadinSession.java:1007) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at com.vaadin.server.VaadinService.ensureAccessQueuePurged(VaadinService.java:1983) [vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at com.vaadin.server.VaadinService.accessSession(VaadinService.java:1949) [vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at com.vaadin.server.VaadinSession.access(VaadinSession.java:1406) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at com.vaadin.server.VaadinService.fireSessionDestroy(VaadinService.java:506) [vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at com.vaadin.server.VaadinSession.valueUnbound(VaadinSession.java:302) ~[vaadin-server-8.6.4-17-cuba.jar:8.6.4-17-cuba]
	at org.apache.catalina.session.StandardSession.removeAttributeInternal(StandardSession.java:1784) ~[catalina.jar:9.0.14]
	at org.apache.catalina.session.StandardSession.expire(StandardSession.java:856) ~[catalina.jar:9.0.14]
	at org.apache.catalina.session.StandardSession.expire(StandardSession.java:743) ~[catalina.jar:9.0.14]
	at org.apache.catalina.session.StandardSession.invalidate(StandardSession.java:1229) ~[catalina.jar:9.0.14]
	at org.apache.catalina.session.StandardSessionFacade.invalidate(StandardSessionFacade.java:171) ~[catalina.jar:9.0.14]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:189) ~[cuba-web-7.0.10.jar:7.0.10]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[servlet-api.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-websocket.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) ~[spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108) ~[cuba-web-7.0.10.jar:7.0.10]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[catalina.jar:9.0.14]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[catalina.jar:9.0.14]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.14]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) ~[catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[catalina.jar:9.0.14]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[catalina.jar:9.0.14]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) ~[tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.14]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[na:1.8.0_201]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[na:1.8.0_201]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.14]
	at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_201]
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
15:35:17.913 ERROR c.h.c.web.sys.CubaApplicationServlet    - Unable to show error page
java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.groovy.runtime.InvokerHelper
	at groovy.lang.GroovyObjectSupport.getDefaultMetaClass(GroovyObjectSupport.java:59) ~[groovy-2.5.4.jar:2.5.4]
	at groovy.lang.GroovyObjectSupport.<init>(GroovyObjectSupport.java:32) ~[groovy-2.5.4.jar:2.5.4]
	at groovy.lang.Binding.<init>(Binding.java:35) ~[groovy-2.5.4.jar:2.5.4]
	at groovy.lang.GroovyShell.<init>(GroovyShell.java:91) ~[groovy-2.5.4.jar:2.5.4]
	at groovy.text.SimpleTemplateEngine.<init>(SimpleTemplateEngine.java:113) ~[groovy-templates-2.5.4.jar:2.5.4]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.prepareErrorHtml(CubaApplicationServlet.java:437) [cuba-web-7.0.10.jar:7.0.10]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.handleServerError(CubaApplicationServlet.java:398) [cuba-web-7.0.10.jar:7.0.10]
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:219) [cuba-web-7.0.10.jar:7.0.10]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) [servlet-api.jar:na]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) [catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) [tomcat-websocket.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73) [spring-web-5.1.6.RELEASE.jar:5.1.6.RELEASE]
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108) [cuba-web-7.0.10.jar:7.0.10]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:9.0.14]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) [catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:9.0.14]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) [catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [catalina.jar:9.0.14]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.14]
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668) [catalina.jar:9.0.14]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [catalina.jar:9.0.14]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:9.0.14]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:9.0.14]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834) [tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417) [tomcat-coyote.jar:9.0.14]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.14]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_201]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_201]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.14]
	at java.lang.Thread.run(Thread.java:748) [na:1.8.0_201]

Not sure what to do next?

I think I cracked it. The trick is to do it all in one batch. The hard part was figuring out how to get the EntitySet returned from dataContext.merge() to be List<Repdefs> again. Here’s the final code:

        List<Repdefs> listRepdefs = dataManager.load(Repdefs.class)
                .query("select e from custfm_Repdefs e where e.id.cus = -1")
                .view("_local")
                .list();

        listRepdefs.stream().forEach(repdefs -> {
            repdefs.setCus(getEditedEntity());
        });

        listRepdefs = (List<Repdefs>)(List<?>)dataContext.merge(listRepdefs).stream().collect(toList());
        repdefsDc.getMutableItems().addAll(listRepdefs);

It executes in a few seconds without any GC errors. Gotta love generics and streams!

For those who are less versed in this stuff (like me):

This works because the EntitySet that is returned by the dataContext.merge() call is actually a set of Repdefs objects, just like I need. The problem is that Java doesn’t know it. So, the (List<?>) casting removes the EntitySet (which is a Set of Entity objects) type from the collection, and the (List<Repdefs>) casts it into a list of the Repdef entities I need. I first confirmed that the EntitySet really does contain Repdef objects via the debugger before doing this. This could go wrong pretty quickly if the objects in the EntitySet are not what you think they are. :wink:

1 Like

You’d better not use such a type casts. Just create a new variable:

Set<Repdefs> committed = dataContext.merge(listRepdefs);
repdefsDc.getMutableItems().addAll(committed);

Unfortunately, that does not work. I get:

Screenshot%20from%202019-08-15%2009-42-38

The EntitySet returned by dataContext can’t assigned to a Set. I also tried a typecast, but that doesn’t work either:

Screenshot%20from%202019-08-15%2009-54-55

For Java generics you should use cast without typing, like:

Set<Repdefs> d = (Set) dataContext.merge(list);