加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 18:35:39 所属栏目:安全 来源:网络整理
导读:我只是对模式匹配及其相应的字节代码进行了一些调查. 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
我只是对模式匹配及其相应的字节代码进行了一些调查.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读