msgpack-java
msgpack-java copied to clipboard
MapValue#equals too slow
version 0.7.0-p2
import org.msgpack.value._
object Main {
def mapValueEqualsTime(size: Int): Unit = {
val keyValues: Array[Value] = (1 to size).flatMap{ key =>
Seq(ValueFactory.newString(key.toString), ValueFactory.nilValue())
}.toArray
val map1, map2 = ValueFactory.newMap(keyValues)
println(size)
System.gc
val start = System.nanoTime
map1 == map2
println((System.nanoTime - start) / 1000000.0)
println
}
def main(args: Array[String]) {
mapValueEqualsTime(10)
mapValueEqualsTime(100)
mapValueEqualsTime(1000)
mapValueEqualsTime(10000)
mapValueEqualsTime(100000)
}
}
result
10
1.634357
100
4.078424
1000
10.137222
10000
183.871329
100000
22959.867596
New MapValue.equals is implemented by translating the value into a Map: https://github.com/msgpack/msgpack-java/blob/v07-develop/msgpack-core/src/main/java/org/msgpack/value/impl/ImmutableMapValueImpl.java#L137-137
This implementation still might have this performance problem.