Community
Participate
Working Groups
>Stack overflow for the 3rd recursive step when persisting 128 bidirectionally linked entities in a closed ring >Note: reducing the ring to 64 entities works fine for the following memory size -Xmx1024m -Xms1024m -XX:+UseParallelGC -XX:PermSize=256M -XX:MaxPermSize=512M (64 bit Eclipse 3.5) org.eclipse.platform --launcher.XXMaxPermSize 512m -vmargs -Xms40m -Xmx512m (32 bit Eclipse 3.5 SR2) --launcher.XXMaxPermSize 512M -Xms1024m -Xmx1024m >tried -Xss40m (anything bigger than 256 on 32 bit gets...) Error occurred during initialization of VM Could not reserve enough space for object heap >stacktrace [EL Finest]: 2010-04-27 12:05:56.033--UnitOfWork(11601738)--Thread(Thread[main,5,main])--Execute query WriteObjectQuery(ProcessingUnit@12039161[0:0]) [EL Finest]: 2010-04-27 12:05:56.033--UnitOfWork(11601738)--Thread(Thread[main,5,main])--Execute query WriteObjectQuery([0000]) [EL Finest]: 2010-04-27 12:05:56.033--UnitOfWork(11601738)--Thread(Thread[main,5,main])--Execute query WriteObjectQuery(ProcessingUnit@8970080[0:0]) [EL Finest]: 2010-04-27 12:05:56.033--UnitOfWork(11601738)--Thread(Thread[main,5,main])--Execute query WriteObjectQuery([0000]) [EL Finest]: 2010-04-27 12:05:56.033--UnitOfWork(11601738)--Thread(Thread[main,5,main])--Execute query WriteObjectQuery(ProcessingUnit@78219[0:0]) Exception in thread "main" java.lang.StackOverflowError at java.util.ResourceBundle.findBundle(ResourceBundle.java:1289) at java.util.ResourceBundle.findBundle(ResourceBundle.java:1292) at java.util.ResourceBundle.findBundle(ResourceBundle.java:1292) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1234) at java.util.ResourceBundle.getBundle(ResourceBundle.java:787) at org.eclipse.persistence.internal.localization.EclipseLinkLocalization.buildMessage(EclipseLinkLocalization.java:60) at org.eclipse.persistence.internal.localization.TraceLocalization.buildMessage(TraceLocalization.java:30) at org.eclipse.persistence.logging.AbstractSessionLog.formatMessage(AbstractSessionLog.java:801) at org.eclipse.persistence.logging.DefaultSessionLog.log(DefaultSessionLog.java:156) at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:2585) at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3678) at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3650) at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3626) at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3548) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1201) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.executeQuery(UnitOfWorkImpl.java:1856) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1167) at org.eclipse.persistence.mappings.ObjectReferenceMapping.insert(ObjectReferenceMapping.java:972) at org.eclipse.persistence.mappings.ObjectReferenceMapping.preInsert(ObjectReferenceMapping.java:495) at org.eclipse.persistence.descriptors.DescriptorQueryManager.preInsert(DescriptorQueryManager.java:998) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:411) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:543) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:511) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:388) at org.eclipse.persistence.queries.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:121) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:282) at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:730) at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:637) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2914) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.executeQuery(UnitOfWorkImpl.java:1856) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1167) at org.eclipse.persistence.mappings.ObjectReferenceMapping.insert(ObjectReferenceMapping.java:972) at org.eclipse.persistence.mappings.ObjectReferenceMapping.preInsert(ObjectReferenceMapping.java:495) at org.eclipse.persistence.descriptors.DescriptorQueryManager.preInsert(DescriptorQueryManager.java:998) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:411) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:543) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:511) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:388) at org.eclipse.persistence.queries.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:121) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:282) at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:730) at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:637) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2914) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) ... >With logging defaulted to INFO/Warning we get the same recursion stack overflow - without the exception message _created 160 links between 64 routers [ 1 ] iter: 1 time: 385Exception in thread "main" java.lang.StackOverflowError at org.eclipse.persistence.queries.DatabaseQuery.checkForCustomQuery(DatabaseQuery.java:461) at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:485) at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:470) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:700) at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:637) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2914) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.executeQuery(UnitOfWorkImpl.java:1856) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1167) at org.eclipse.persistence.mappings.ObjectReferenceMapping.insert(ObjectReferenceMapping.java:972) at org.eclipse.persistence.mappings.ObjectReferenceMapping.preInsert(ObjectReferenceMapping.java:495) at org.eclipse.persistence.descriptors.DescriptorQueryManager.preInsert(DescriptorQueryManager.java:998) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:411) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommit(InsertObjectQuery.java:80) at org.eclipse.persistence.queries.InsertObjectQuery.executeCommitWithChangeSet(InsertObjectQuery.java:90) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.performUserDefinedWrite(DatabaseQueryMechanism.java:543) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.performUserDefinedInsert(DatabaseQueryMechanism.java:511) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.insertObjectForWrite(DatabaseQueryMechanism.java:388) at org.eclipse.persistence.queries.WriteObjectQuery.executeCommitWithChangeSet(WriteObjectQuery.java:121) at org.eclipse.persistence.internal.queries.DatabaseQueryMechanism.executeWriteWithChangeSet(DatabaseQueryMechanism.java:282) at org.eclipse.persistence.queries.WriteObjectQuery.executeDatabaseQuery(WriteObjectQuery.java:58) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:730) at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:637) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWorkObjectLevelModifyQuery(ObjectLevelModifyQuery.java:108) at org.eclipse.persistence.queries.ObjectLevelModifyQuery.executeInUnitOfWork(ObjectLevelModifyQuery.java:85) at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2914) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207)
Created attachment 166217 [details] JPA SE reproduction of StackOverflowError on persist recursion >I am trying different configurations of stack allocation JVM parameters
>fix is to increase the native stack and java stack per thread size from the default of ? to 42 (unable to use 45+ on a 32 bit JVM) >use -------------- -Xss42m -Xoss42m >This solves the stack overflow issue during persisting the ring of entities up to a 12 dimensional hypercube (aka Oracle/TM CM-1/2) - instead of failing at at a ringed cube of 64 entities we are good to 4096 entities _created 2 links between 2 routers in the 1 dimensional HyperCube. Total time: 0.15 sec @ 6.666666666666667 iter/sec _created 8 links between 4 routers in the 2 dimensional HyperCube. Total time: 0.36 sec @ 2.7777777777777777 iter/sec _created 24 links between 8 routers in the 3 dimensional HyperCube. Total time: 0.27 sec @ 3.7037037037037033 iter/sec _created 64 links between 16 routers in the 4 dimensional HyperCube. Total time: 0.52 sec @ 1.923076923076923 iter/sec _created 160 links between 32 routers in the 5 dimensional HyperCube. Total time: 0.85 sec @ 1.1764705882352942 iter/sec _created 384 links between 64 routers in the 6 dimensional HyperCube. Total time: 1.87 sec @ 0.53475935828877 iter/sec _created 896 links between 128 routers in the 7 dimensional HyperCube. Total time: 3.45 sec @ 0.2898550724637681 iter/sec _created 2048 links between 256 routers in the 8 dimensional HyperCube. Total time: 7.14 sec @ 0.1400560224089636 iter/sec _created 4608 links between 512 routers in the 9 dimensional HyperCube. Total time: 13.84 sec @ 0.07225433526011561 iter/sec _created 10240 links between 1024 routers in the 10 dimensional HyperCube. Total time: 41.01 sec @ 0.0243842965130456 iter/sec _created 22528 links between 2048 routers in the 11 dimensional HyperCube. Total time: 114.101 sec @ 0.00876416508181348 iter/sec _created 49152 links between 4096 routers in the 12 dimensional HyperCube. Total time: 414.411 sec @ 0.0024130633598046384 iter/sec _created 106496 links between 8192 routers in the 13 dimensional HyperCube. Exception in thread "main" java.lang.StackOverflowError at org.eclipse.persistence.queries.DatabaseQuery.checkPrepare(DatabaseQuery.java:470) >We also will eventually 2nd wall of actual object memory storage of 1.6GB for the 32 bit version anyway at dimension 19 or 512K entities. >Running on a 64 bit JVM uses up to 3.2Gb of ram and has the same heap profile except for the fact that all words are length doubled (32-64) >need to verify what both the SUN and EclipseLink PerformanceProfiler have to say.
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink