[jboss-dev-forums] [JBoss Serialization Development] - OutOfMemoryError

lawc do-not-reply at jboss.com
Thu Sep 10 11:24:14 EDT 2009


Hi,

I get the following exception when serializing/deserializing an object of type: javax.management.openmbean.OpenType,

anonymous wrote : 
  | Type: java.lang.OutOfMemoryError
  | Message: Java heap space
  | Stack trace: 
  |     at java.lang.AbstractStringBuilder.(AbstractStringBuilder.java:45)
  |     at java.lang.StringBuffer.(StringBuffer.java:91)
  |     at org.jboss.serial.util.StringUtil.readString(StringUtil.java:295)
  |     at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readUTF(DataContainer.java:757)
  |     at org.jboss.serial.persister.ObjectInputStreamProxy.readUTF(ObjectInputStreamProxy.java:196)
  |     at org.jboss.serial.objectmetamodel.FieldsContainer.readField(FieldsContainer.java:147)
  |     at org.jboss.serial.objectmetamodel.FieldsContainer.readMyself(FieldsContainer.java:218)
  |     at org.jboss.serial.persister.ObjectInputStreamProxy.readFields(ObjectInputStreamProxy.java:224)
  |     at javax.management.openmbean.OpenType.readObject(OpenType.java:378)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:1)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:597)
  |     at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:103)
  |     at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:269)
  |     at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
  |     at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
  |     at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
  |     at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:643)
  |     at org.jboss.serial.persister.RegularObjectPersister.readSlotWithFields(RegularObjectPersister.java:353)
  |     at org.jboss.serial.persister.ObjectInputStreamProxy.defaultReadObject(ObjectInputStreamProxy.java:78)
  |     at alchemy.mx.mbean.SimpleTabularDataSupport.readObject(SimpleTabularDataSupport.java:971)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:1)
  |     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  |     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  |     at java.lang.reflect.Method.invoke(Method.java:597)
  |     at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:103)
  |     at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:269)
  |     at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
  |     at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
  |     at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
  |     at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:643)
  | 

The code fails in StringUtil.readString(DataInput, StringUtilBuffer) method when it tries to instantiate a StringBuffer:


  | if (strbuffer==null)
  | {
  |             strbuffer = new StringBuffer((int)size);
  | }
  | 

The size variable at this stage has a value of 42238343537016.

I am trying to write a test case to reproduce the error, but my test code gives a different exception:


  | 		OpenType[] itemTypes = new OpenType[] { SimpleType.STRING,
  | 				SimpleType.STRING, SimpleType.STRING };
  | 		String[] itemNames = new String[] { "Item1", "Item2", "Item3" };
  | 		String[] itemDescriptions = new String[] { "Item 1", "Item 2", "Item 3" };
  | 		CompositeType rowType = new CompositeType("composite", "Description",
  | 				itemNames, itemDescriptions, itemTypes);
  | 
  | 		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
  | 		JBossObjectOutputStream os = new JBossObjectOutputStream(byteOut);
  | 		os.writeObject(rowType);
  | 		os.flush();
  | 
  | 		ByteArrayInputStream byteInpt = new ByteArrayInputStream(byteOut
  | 				.toByteArray());
  | 		JBossObjectInputStream is = new JBossObjectInputStream(byteInpt);
  | 		rowType = (CompositeType) is.readObject();
  | 

Exception:

anonymous wrote : 
  | java.io.IOException
  | 	at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:107)
  | 	at org.jboss.serial.persister.RegularObjectPersister.defaultRead(RegularObjectPersister.java:269)
  | 	at org.jboss.serial.persister.RegularObjectPersister.readData(RegularObjectPersister.java:241)
  | 	at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.readObjectDescriptionFromStreaming(ObjectDescriptorFactory.java:412)
  | 	at org.jboss.serial.objectmetamodel.ObjectDescriptorFactory.objectFromDescription(ObjectDescriptorFactory.java:82)
  | 	at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readObject(DataContainer.java:643)
  | 	at org.jboss.serial.io.JBossObjectInputStream.readObjectOverride(JBossObjectInputStream.java:163)
  | 	at java.io.ObjectInputStream.readObject(ObjectInputStream.java:345)
  | 	at alchemy.measure.TestInterfaces.testSerialization(TestInterfaces.java:90)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 	at java.lang.reflect.Method.invoke(Method.java:597)
  | 	at junit.framework.TestCase.runTest(TestCase.java:168)
  | 	at junit.framework.TestCase.runBare(TestCase.java:134)
  | 	at junit.framework.TestResult$1.protect(TestResult.java:110)
  | 	at junit.framework.TestResult.runProtected(TestResult.java:128)
  | 	at junit.framework.TestResult.run(TestResult.java:113)
  | 	at junit.framework.TestCase.run(TestCase.java:124)
  | 	at junit.framework.TestSuite.runTest(TestSuite.java:232)
  | 	at junit.framework.TestSuite.run(TestSuite.java:227)
  | 	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
  | 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
  | 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
  | Caused by: java.lang.reflect.InvocationTargetException
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 	at java.lang.reflect.Method.invoke(Method.java:597)
  | 	at org.jboss.serial.persister.RegularObjectPersister.readSlotWithMethod(RegularObjectPersister.java:103)
  | 	... 27 more
  | Caused by: java.io.EOFException
  | 	at java.io.DataInputStream.readFully(DataInputStream.java:180)
  | 	at org.jboss.serial.util.StringUtil.pullDataToBuffer(StringUtil.java:191)
  | 	at org.jboss.serial.util.StringUtil.readString(StringUtil.java:238)
  | 	at org.jboss.serial.objectmetamodel.DataContainer$DataContainerDirectInput.readUTF(DataContainer.java:757)
  | 	at org.jboss.serial.persister.ObjectInputStreamProxy.readUTF(ObjectInputStreamProxy.java:196)
  | 	at org.jboss.serial.objectmetamodel.FieldsContainer.readField(FieldsContainer.java:147)
  | 	at org.jboss.serial.objectmetamodel.FieldsContainer.readMyself(FieldsContainer.java:218)
  | 	at org.jboss.serial.persister.ObjectInputStreamProxy.readFields(ObjectInputStreamProxy.java:224)
  | 	at javax.management.openmbean.OpenType.readObject(OpenType.java:378)
  | 	... 32 more
  | 

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4254487#4254487

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4254487



More information about the jboss-dev-forums mailing list