diff options
Diffstat (limited to 'benchmarks/regression/SerializationBenchmark.java')
-rw-r--r-- | benchmarks/regression/SerializationBenchmark.java | 217 |
1 files changed, 217 insertions, 0 deletions
diff --git a/benchmarks/regression/SerializationBenchmark.java b/benchmarks/regression/SerializationBenchmark.java new file mode 100644 index 0000000..bc958eb --- /dev/null +++ b/benchmarks/regression/SerializationBenchmark.java @@ -0,0 +1,217 @@ +/* + * Copyright (C) 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package benchmarks.regression; + +import com.google.caliper.Param; +import com.google.caliper.Runner; +import com.google.caliper.SimpleBenchmark; +import java.io.*; +import java.lang.reflect.*; +import java.util.*; + +public class SerializationBenchmark extends SimpleBenchmark { + private static byte[] bytes(Object o) throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); + ObjectOutputStream out = new ObjectOutputStream(baos); + out.writeObject(o); + out.close(); + return baos.toByteArray(); + } + + public void timeReadIntArray(int reps) throws Exception { + int[] intArray = new int[256]; + readSingleObject(reps, intArray); + } + + public void timeWriteIntArray(int reps) throws Exception { + int[] intArray = new int[256]; + writeSingleObject(reps, intArray); + } + public void timeReadArrayListInteger(int reps) throws Exception { + ArrayList<Integer> object = new ArrayList<Integer>(); + for (int i = 0; i < 256; ++i) { + object.add(i); + } + readSingleObject(reps, object); + } + + public void timeWriteArrayListInteger(int reps) throws Exception { + ArrayList<Integer> object = new ArrayList<Integer>(); + for (int i = 0; i < 256; ++i) { + object.add(i); + } + writeSingleObject(reps, object); + } + + public void timeReadString(int reps) throws Exception { + readSingleObject(reps, "hello"); + } + + public void timeReadObjectStreamClass(int reps) throws Exception { + // A special case because serialization itself requires this class. + // (This should really be a unit test.) + ObjectStreamClass osc = ObjectStreamClass.lookup(String.class); + readSingleObject(reps, osc); + } + + public void timeWriteString(int reps) throws Exception { + // String is a special case that avoids JNI. + writeSingleObject(reps, "hello"); + } + + public void timeWriteObjectStreamClass(int reps) throws Exception { + // A special case because serialization itself requires this class. + // (This should really be a unit test.) + ObjectStreamClass osc = ObjectStreamClass.lookup(String.class); + writeSingleObject(reps, osc); + } + + // This is a baseline for the others. + public void timeWriteNoObjects(int reps) throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); + ObjectOutputStream out = new ObjectOutputStream(baos); + for (int rep = 0; rep < reps; ++rep) { + out.reset(); + baos.reset(); + } + out.close(); + } + + private void readSingleObject(int reps, Object object) throws Exception { + byte[] bytes = bytes(object); + ByteArrayInputStream bais = new ByteArrayInputStream(bytes); + for (int rep = 0; rep < reps; ++rep) { + ObjectInputStream in = new ObjectInputStream(bais); + in.readObject(); + in.close(); + bais.reset(); + } + } + + private void writeSingleObject(int reps, Object o) throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); + ObjectOutputStream out = new ObjectOutputStream(baos); + for (int rep = 0; rep < reps; ++rep) { + out.writeObject(o); + out.reset(); + baos.reset(); + } + out.close(); + } + + public void timeWriteEveryKindOfField(int reps) throws Exception { + writeSingleObject(reps, new LittleBitOfEverything()); + } + public void timeWriteSerializableBoolean(int reps) throws Exception { + writeSingleObject(reps, new SerializableBoolean()); + } + public void timeWriteSerializableByte(int reps) throws Exception { + writeSingleObject(reps, new SerializableByte()); + } + public void timeWriteSerializableChar(int reps) throws Exception { + writeSingleObject(reps, new SerializableChar()); + } + public void timeWriteSerializableDouble(int reps) throws Exception { + writeSingleObject(reps, new SerializableDouble()); + } + public void timeWriteSerializableFloat(int reps) throws Exception { + writeSingleObject(reps, new SerializableFloat()); + } + public void timeWriteSerializableInt(int reps) throws Exception { + writeSingleObject(reps, new SerializableInt()); + } + public void timeWriteSerializableLong(int reps) throws Exception { + writeSingleObject(reps, new SerializableLong()); + } + public void timeWriteSerializableShort(int reps) throws Exception { + writeSingleObject(reps, new SerializableShort()); + } + public void timeWriteSerializableReference(int reps) throws Exception { + writeSingleObject(reps, new SerializableReference()); + } + + public void timeReadEveryKindOfField(int reps) throws Exception { + readSingleObject(reps, new LittleBitOfEverything()); + } + public void timeReadSerializableBoolean(int reps) throws Exception { + readSingleObject(reps, new SerializableBoolean()); + } + public void timeReadSerializableByte(int reps) throws Exception { + readSingleObject(reps, new SerializableByte()); + } + public void timeReadSerializableChar(int reps) throws Exception { + readSingleObject(reps, new SerializableChar()); + } + public void timeReadSerializableDouble(int reps) throws Exception { + readSingleObject(reps, new SerializableDouble()); + } + public void timeReadSerializableFloat(int reps) throws Exception { + readSingleObject(reps, new SerializableFloat()); + } + public void timeReadSerializableInt(int reps) throws Exception { + readSingleObject(reps, new SerializableInt()); + } + public void timeReadSerializableLong(int reps) throws Exception { + readSingleObject(reps, new SerializableLong()); + } + public void timeReadSerializableShort(int reps) throws Exception { + readSingleObject(reps, new SerializableShort()); + } + public void timeReadSerializableReference(int reps) throws Exception { + readSingleObject(reps, new SerializableReference()); + } + + public static class SerializableBoolean implements Serializable { + boolean z; + } + public static class SerializableByte implements Serializable { + byte b; + } + public static class SerializableChar implements Serializable { + char c; + } + public static class SerializableDouble implements Serializable { + double d; + } + public static class SerializableFloat implements Serializable { + float f; + } + public static class SerializableInt implements Serializable { + int i; + } + public static class SerializableLong implements Serializable { + long j; + } + public static class SerializableShort implements Serializable { + short s; + } + public static class SerializableReference implements Serializable { + Object l; + } + + public static class LittleBitOfEverything implements Serializable { + boolean z; + byte b; + char c; + double d; + float f; + int i; + long j; + short s; + Object l; + } +} |