[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