Open
Description
It happened that parsing of BigInt
and BigDecimal
in latest versions of JVM has O(n^2)
complexity where n
is the number of significant digits. It means that a JSON body with a length ~1Mb can do 100% load one CPU core for several seconds:
scala> def timed[A](f: => A): A = { val t = System.currentTimeMillis(); val r = f; println(s"Took ${System.currentTimeMillis() - t} millis"); r }
timed: [A](f: => A)A
scala> List(1000, 10000, 100000, 1000000).foreach(x => timed(BigInt("9" * x)))
Took 0 millis
Took 2 millis
Took 135 millis
Took 13221 millis
scala> List(1000, 10000, 100000, 1000000).foreach(x => timed(BigDecimal("9" * x)))
Took 0 millis
Took 2 millis
Took 138 millis
Took 13440 millis
Metadata
Metadata
Assignees
Labels
No labels