[
http://jira.jboss.com/jira/browse/JBMESSAGING-777?page=comments#action_12... ]
Tim Fox commented on JBMESSAGING-777:
-------------------------------------
I have created a simple test to compare the performance of creating a new
ObjectInput/OutputStream each time compared with re-using them:
public void test2() throws Exception
{
{
long start = System.currentTimeMillis();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int i = 0; i < 100000; i++)
{
ObjectOutputStream oos = new ObjectOutputStream(baos);
SimpleObj obj = new SimpleObj(true);
oos.writeObject(obj);
oos.close();
}
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
for (int i = 0; i < 100000; i++)
{
ObjectInputStream ois = new ObjectInputStream(bais);
SimpleObj obj2 = (SimpleObj)ois.readObject();
//log.info("obj2 is " + obj2);
ois.close();
//log.info("did " + i);
}
long end = System.currentTimeMillis();
log.info("that took " + (end - start) + " ms");
}
{
long start = System.currentTimeMillis();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
for (int i = 0; i < 100000; i++)
{
SimpleObj obj = new SimpleObj(true);
oos.writeObject(obj);
oos.flush();
}
byte[] bytes = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
for (int i = 0; i < 100000; i++)
{
SimpleObj obj2 = (SimpleObj)ois.readObject();
//log.info("obj2 is " + obj2);
//log.info("did " + i);
}
ois.close();
long end = System.currentTimeMillis();
log.info("that took " + (end - start) + " ms");
}
}
000, pageSize=2000, downCacheSize=2000
@main 23:57:48,250 INFO [SimpleTest] that took 11391 ms
@main 23:57:56,187 INFO [SimpleTest] that took 7937 ms
So there is about a 40% difference.
Considering that serialization is only used for object message bodies, and remoting
internal invocations I don't see this is a big issue.
Revise creation of Object*Stream on Remoting/our Marshallers
------------------------------------------------------------
Key: JBMESSAGING-777
URL:
http://jira.jboss.com/jira/browse/JBMESSAGING-777
Project: JBoss Messaging
Issue Type: Bug
Affects Versions: 1.2.0.Beta2
Reporter: Clebert Suconic
Assigned To: Ovidiu Feodorov
Fix For: 1.2.0.CR1
We have requested to create a new Object*Stream on every request... delegating the
Object*Stream creation to the marshaller.
A Object*Stream should be reused.. and created only once... Especially if using
JavaSerialization, since :
I - its creation is considered expensive
II - Object*Stream has a weird internal buffer. overusing that stream creationg might
cause intermitent errors IMO. It would be better if we could avoid recreating the
streaming every time.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira