Skip to content

Commit

Permalink
Merge pull request #72 from luben/master
Browse files Browse the repository at this point in the history
Add the default Java serialization to the performance comparisson
  • Loading branch information
romix committed Jan 15, 2016
2 parents 7ca69a0 + d63a02a commit 662ba3e
Showing 1 changed file with 149 additions and 59 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ class AkkaKryoCompressionTests extends FlatSpec {
}
}
serializers {
java = "akka.serialization.JavaSerializer"
kryo = "com.romix.akka.serialization.kryo.KryoSerializer"
}
Expand Down Expand Up @@ -134,7 +135,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"boom" -> true,
"hash" -> HashMap[Int, Int](1 -> 200, 2 -> 300, 500 -> 3))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -152,7 +156,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"boom" -> true,
"hash" -> HashMap[Int, Int](1 -> 200, 2 -> 300, 500 -> 3))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -163,20 +170,23 @@ class AkkaKryoCompressionTests extends FlatSpec {
}

it should "serialize and deserialize mutable AnyRefMap[String,Any] successfully" in {
val r = new scala.util.Random(0L)
val tm = AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
if (systemName != "Java") {
val r = new scala.util.Random(0L)
val tm = AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])

val deserialized = serialization.deserialize(serialized.get, classOf[AnyRefMap[String, Any]])
assert(deserialized.isSuccess)
assert(deserialized.get == tm)
val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)

val deserialized = serialization.deserialize(serialized.get, classOf[AnyRefMap[String, Any]])
assert(deserialized.isSuccess)
assert(deserialized.get == tm)
}
}

it should "serialize and deserialize mutable HashMap[String,Any] successfully" in {
Expand All @@ -187,7 +197,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"boom" -> true,
"hash" -> HashMap[Int, Int](1 -> 200, 2 -> 300, 500 -> 3))

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -201,7 +214,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize immutable HashSet[String] successfully" in {
val tm = scala.collection.immutable.HashSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -214,7 +230,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize immutable TreeSet[String] successfully" in {
val tm = scala.collection.immutable.TreeSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -227,7 +246,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize mutable HashSet[String] successfully" in {
val tm = scala.collection.mutable.HashSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -240,7 +262,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
it should "serialize and deserialize mutable TreeSet[String] successfully" in {
val tm = scala.collection.mutable.TreeSet[String]("foo", "bar", "baz", "boom")

assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(tm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(tm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(tm)
assert(serialized.isSuccess)
Expand All @@ -262,7 +287,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -292,7 +320,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -325,7 +356,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
4L -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand All @@ -345,35 +379,37 @@ class AkkaKryoCompressionTests extends FlatSpec {
}

it should "serialize and deserialize Array[AnyRefMap[String,Any]] timings (with compression)" in {
val iterations = 500
val listLength = 500

val r = new scala.util.Random(0L)
val atm = (List.fill(listLength) {
AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)

val deserialized = serialization.deserialize(serialized.get, classOf[Array[AnyRefMap[String, Any]]])
assert(deserialized.isSuccess)

val bytes = serialized.get
println(s"Serialized to ${bytes.length} bytes")

timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
if (systemName != "Java") { // AnyRefMap can't be serialized by the Java serializer
val iterations = 500
val listLength = 500

val r = new scala.util.Random(0L)
val atm = (List.fill(listLength) {
AnyRefMap[String, Any](
"foo" -> r.nextDouble,
"bar" -> "foo,bar,baz",
"baz" -> 124L,
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)

val deserialized = serialization.deserialize(serialized.get, classOf[Array[AnyRefMap[String, Any]]])
assert(deserialized.isSuccess)

val bytes = serialized.get
println(s"Serialized to ${bytes.length} bytes")

timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Serialize: ", iterations) { serialization.serialize(atm) }
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
timeIt("Mutable AnyRefMap Deserialize: ", iterations)(serialization.deserialize(bytes, classOf[Array[AnyRefMap[String, Any]]]))
}
}

it should "serialize and deserialize Array[mutable.HashMap[String,Any]] timings (with compression)" in {
Expand All @@ -386,7 +422,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"hash" -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -419,7 +458,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
4L -> HashMap[Int, Int](r.nextInt -> r.nextInt, 5 -> 500, 10 -> r.nextInt))
}).toArray

assert(serialization.findSerializerFor(atm).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(atm).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(atm).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(atm)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -447,7 +489,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand All @@ -474,7 +519,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -502,7 +550,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
)
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand All @@ -529,7 +580,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand All @@ -556,7 +610,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
"foo", "bar", "foo,bar,baz", "baz", r.nextString(10))
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -584,7 +641,10 @@ class AkkaKryoCompressionTests extends FlatSpec {
)
}).toArray

assert(serialization.findSerializerFor(orig).getClass === classOf[KryoSerializer])
if (systemName != "Java")
assert(serialization.findSerializerFor(orig).getClass == classOf[KryoSerializer])
else
assert(serialization.findSerializerFor(orig).getClass != classOf[KryoSerializer])

val serialized = serialization.serialize(orig)
assert(serialized.isSuccess)
Expand Down Expand Up @@ -617,4 +677,34 @@ class AkkaKryoCompressionTests extends FlatSpec {
|akka.actor.kryo.encryption.aes.key = j68KkRjq21ykRGAQ
""".stripMargin)
testConfig("Off", "")
testConfig("Java",
"""akka.actor.serialization-bindings {
|"scala.Product" = java
|"akka.actor.ActorRef" = java
|"scala.collection.immutable.TreeMap" = java
|"[Lscala.collection.immutable.TreeMap;" = java
|"scala.collection.mutable.HashMap" = java
|"[Lscala.collection.mutable.HashMap;" = java
|"scala.collection.immutable.HashMap" = java
|"[Lscala.collection.immutable.HashMap;" = java
|"scala.collection.mutable.AnyRefMap" = java
|"[Lscala.collection.mutable.AnyRefMap;" = java
|"scala.collection.immutable.LongMap" = java
|"[Lscala.collection.immutable.LongMap;" = java
|"scala.collection.mutable.LongMap" = java
|"[Lscala.collection.mutable.LongMap;" = java
|"scala.collection.immutable.HashSet" = java
|"[Lscala.collection.immutable.HashSet;" = java
|"scala.collection.immutable.TreeSet" = java
|"[Lscala.collection.immutable.TreeSet;" = java
|"scala.collection.immutable.BitSet" = java
|"[Lscala.collection.immutable.BitSet;" = java
|"scala.collection.mutable.HashSet" = java
|"[Lscala.collection.mutable.HashSet;" = java
|"scala.collection.mutable.TreeSet" = java
|"[Lscala.collection.mutable.TreeSet;" = java
|"scala.collection.mutable.BitSet" = java
|"[Lscala.collection.mutable.BitSet;" = java
|}
|""".stripMargin)
}

0 comments on commit 662ba3e

Please sign in to comment.