[jboss-cvs] jboss-serialization/tests/org/jboss/serial/benchmarks ...
Clebert Suconic
csuconic at jboss.com
Tue Apr 10 13:21:49 EDT 2007
User: csuconic
Date: 07/04/10 13:21:49
Added: tests/org/jboss/serial/benchmarks JBossCacheTestCase.java
Log:
http://jira.jboss.org/jira/browse/JBSER-84 - Implementation of User Based Immutables
Revision Changes Path
1.1 date: 2007/04/10 17:21:49; author: csuconic; state: Exp;jboss-serialization/tests/org/jboss/serial/benchmarks/JBossCacheTestCase.java
Index: JBossCacheTestCase.java
===================================================================
package org.jboss.serial.benchmarks;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import junit.framework.TestCase;
import org.jboss.serial.io.JBossObjectInputStream;
import org.jboss.serial.io.JBossObjectOutputStream;
/**
* Tests the performance of JBoss Serialization
*
* @author <a href="mailto:manik at jboss.org">Manik Surtani (manik at jboss.org)</a>
*/
public class JBossCacheTestCase extends TestCase
{
// you can change these variables to change behavior of this testsuite, for debug purposes:
public static boolean SAVE_FILE = false;
public static final int relatedObjectListSize = 5;
private static final Random random = new Random();
static class DummyObject implements Serializable
{
private static final long serialVersionUID = -1374365296408936578L;
String stringName;
List list = new ArrayList(relatedObjectListSize);
public DummyObject()
{
stringName = "Hello world, blah blah blah." + random.nextInt();
for (int i = 0; i < relatedObjectListSize; i++) list.add(new DummyRelatedObject());
}
public boolean equals(Object o)
{
DummyObject obj = (DummyObject) o;
return stringName.equals(obj.stringName) && list.equals(obj.list);
}
public int hashCode()
{
return (stringName.hashCode() * 10 + list.hashCode());
}
}
static class DummyRelatedObject implements Serializable
{
String state;
public DummyRelatedObject()
{
state = "some random state " + random.nextInt();
}
public boolean equals(Object o)
{
return state.equals(((DummyRelatedObject) o).state);
}
public int hashCode()
{
return state.hashCode();
}
}
private static void saveBytes(File fileName, byte[] bytes) throws Exception
{
if (SAVE_FILE)
{
FileOutputStream fileOut = new FileOutputStream(fileName);
fileOut.write(bytes);
fileOut.close();
}
}
public void testSpeedAndSizeUsingStrings() throws Exception
{
// commented out until we decide whether or not we ship with JBoss Serialization.
doTest(true);
}
public void testSpeedAndSizeUsingComplexObjects() throws Exception
{
// commented out until we decide whether or not we ship with JBoss Serialization.
doTest(false);
}
private void doTest(boolean useStrings) throws Exception
{
Object dummyObject = null;
ByteArrayOutputStream out = new ByteArrayOutputStream();
long start = 0;
for (int i = 0; i < 500000; i++)
{
dummyObject = getDummyObject(useStrings);
out.reset();
if (i == 10000)
{
start = System.currentTimeMillis();
}
ObjectOutputStream objectOut = new ObjectOutputStream(out);
objectOut.writeObject(dummyObject);
objectOut.close();
ObjectInputStream objectInput = new ObjectInputStream(new ByteArrayInputStream(out.toByteArray()));
Object newObject = objectInput.readObject();
assertEquals(dummyObject, newObject);
assertNotSame(dummyObject, newObject);
}
long javaSerializationTime = System.currentTimeMillis() - start;
int javaSerializationSize = out.toByteArray().length;
saveBytes(new File("/tmp/fileJava.bin"), out.toByteArray());
start = 0;
for (int i = 0; i < 500000; i++)
{
dummyObject = getDummyObject(useStrings);
out.reset();
if (i == 10000)
{
start = System.currentTimeMillis();
}
ObjectOutputStream objectOut = new JBossObjectOutputStream(out);
objectOut.writeObject(dummyObject);
objectOut.close();
ObjectInputStream objectInput = new JBossObjectInputStream(new ByteArrayInputStream(out.toByteArray()));
Object newObject = objectInput.readObject();
assertEquals(dummyObject, newObject);
assertNotSame(dummyObject, newObject);
}
long jbossSerializationTime = System.currentTimeMillis() - start;
int jbossSerializationSize = out.toByteArray().length;
System.out.println("FinishJBoss:" + System.currentTimeMillis());
saveBytes(new File("/tmp/fileJBoss.bin"), out.toByteArray());
System.out.println("JBossSerialization Time:" + jbossSerializationTime);
System.out.println("JavaSerialization Time:" + javaSerializationTime);
System.out.println("JBossSerialization Size:" + jbossSerializationSize);
System.out.println("JavaSerialization Size:" + javaSerializationSize);
assertTrue("JBoss Serialization should be FASTER than Java Serialization. Java: " + javaSerializationTime + "; jboss: " + jbossSerializationTime, jbossSerializationTime < javaSerializationTime);
assertTrue("JBoss Serialization output should be SMALLER than Java Serialization. Java: " + javaSerializationSize + "; jboss: " + jbossSerializationSize, jbossSerializationSize < javaSerializationSize);
}
private Object getDummyObject(boolean useString)
{
if (useString)
return "This is a string based dummy object " + random.nextInt();
else
return new DummyObject();
}
}
More information about the jboss-cvs-commits
mailing list