scala - scala 字节码中不必要的加载和存储指令

标签 scala pattern-matching

我只是对模式匹配及其相应的字节码进行了一些研究。

val a = Array(1,2,3,4)
a.map {
  case i => i + 1
}

对于上面的代码,我使用 javap 并获得了 map 中匿名函数的字节码:
public int apply$mcII$sp(int);
Code:
   0: iload_1       
   1: istore_2      
   2: iload_2       
   3: iconst_1      
   4: iadd          
   5: ireturn       

所以在我看来,在第 0 行我们推送了一个 int(参数),然后在第 1 行我们加载了 int,在第 2 行我们把它推回了......这里的目的是什么?

谢谢!

最佳答案

伙计,试试 -optimise .

  public int apply$mcII$sp(int);
    flags: ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
         0: iload_1       
         1: iconst_1      
         2: iadd          
         3: ireturn 


scala> :javap -prv -

然后像
scala> :javap -prv $line4/$read$$iw$$iw$$anonfun$1

关于scala - scala 字节码中不必要的加载和存储指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19296240/

相关文章:

scala - 列表中的 groupBy 作为 LinkedHashMap 而不是 Map

scala - 如何使用 Scala 生成哈希码

algorithm - 如何用don't cares 模式匹配解决二维匹配问题?

excel - 识别模式并提取子串

java - 如何根据以下字符/单词匹配 URI 字符串的特定部分

scala - 找不到参数 tupler 的隐式值

scala - Scala 函数中的类型绑定(bind)使方法引用的管道复杂化

javascript - 正则表达式和javascript,一些匹配消失了!

xml - scalaz-xml 是否已弃用?

regex - 从文件加载正则表达式并在 Perl 中匹配组