Запрос кого-то пожалуйста, объясните это Scala/Java дифференциалом -Scala против соответствия Java Regex: большая разница в производительности: почему?
Использование Scala Pattern Matching
scala> def scalaRegex(count: Int) = {
| val t1 = System.currentTimeMillis
| val r_r = "test".r
| val str = "test"
| for (i <- 0 to count) {
| str match {
| case r_r =>
| }
| }
| val t2 = System.currentTimeMillis
| val diff = t2 - t1
| println(t2); println(t1); println(diff)
| }
scalaRegex: (count: Int)Unit
scala> scalaRegex(1000000000)
1425976261692
1425976261102
590
Использование простой путь в Java, чтобы соответствовать регулярное выражение в -
scala> def javaRegex(count:Int) = {
| val t1 = System.currentTimeMillis
| val r_r = "test".r.pattern
| val str = "test"
| for (i <- 0 to count) {
| r_r.matcher(str).matches()
| }
| val t2 = System.currentTimeMillis
| val diff = t2 - t1
| println(t2); println(t1); println(diff)
| }
javaRegex: (count: Int)Unit
scala> javaRegex(1000000000)
1425976399868
1425976335679
64189
То есть 100 раз дифференциал - Что происходит?
Guessing: scala компилирует свои регулярные выражения и кэширует скомпилированное регулярное выражение для последующего использования. –
«.pattern» в java-коде (за скайдадок) возвращает * скомпилированный * шаблон. поэтому, сохраняя ссылку на него и повторно используя его в цикле - не так ли считается кешированием в java-программе ...? – Bharadwaj
Вы просто путаетесь с 'pattern matching' в функциональных языках, таких как Scala и' regex pattern matching'. –