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

Scala(或JVM)是??否曾经优化(功能)对象?

发布时间:2020-12-16 18:15:26 所属栏目:安全 来源:网络整理
导读:在许多使用 Scala的情况下,例如简单的,本地范围的函数调用,可以想象理论上通常可以完全摆脱函数对象.但AFAIK,JVM不知道如何做到这一点,我也不认为Scala会这样做.正确? 匿名函数对象是否始终密封?如果没有,那么内联可以做多少是非常严格的限制.正确? 是否
在许多使用 Scala的情况下,例如简单的,本地范围的函数调用,可以想象理论上通常可以完全摆脱函数对象.但AFAIK,JVM不知道如何做到这一点,我也不认为Scala会这样做.正确?

匿名函数对象是否始终密封?如果没有,那么内联可以做多少是非常严格的限制.正确?

是否有人知道任何计划的努力可能会解决这些优化问题?

另请参阅相关的纯Java问题:Does a modern JVM optimize simple inline anonymous class allocation?

(颂歌“不要太早优化”,“无关紧要”,此时此刻非常多余且无用.)

解决方法

内联加逃逸分析可以做到这一点.如果您在JVM 7中使用编译报告,或者对以下两段代码进行基准测试,您可以自己演示:

def rfor(i0: Int,i1: Int)(f: Int => Unit) {
  var i = i0
  while (i <= i1) {
    f(i)
    i += 1
  }
}

def whiley = {
  var s = 0
  var n = 1
  while (n <= 500000000) {
    val k = n >> 2
    var i = 1
    while (i <= 2) {
      s += i*k
      i += 1
    }
    n += 1
  }
  s
}

def rfory = {
  var s = 0
  var n = 0
  while (n <= 500000000) {
    val k = n >> 2
    rfor(1,2){ s += k * _ }
    n += 1
  }
  s
}

在我的机器上,第二个至少与第一个一样快(有时更快),尽管第二个看起来需要每隔一次迭代创建一个函数.

(编辑:李大同)

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

    推荐文章
      热点阅读