【问题标题】:scala lambda function and local variablesscala lambda函数和局部变量
【发布时间】:2017-03-21 19:13:11
【问题描述】:

在学习 scal 时,我想知道在 lambda 函数中使用局部变量时的优化。

例如下面的代码:

val My_List = l.map{x =>
     val a = coomplexFun(x.attr_1, x.attr_2 ) ;
     (x.attr_1, doSomthing(a))
}

是否等同于:

val My_List = l.map{x =>
     (x.attr_1, doSomthing(coomplexFun(x.attr_1, x.attr_2 )))
}

还是有一些额外的内存分配成本?

【问题讨论】:

    标签: scala lambda


    【解决方案1】:

    它在运行时是等效的,因为 JIT/Hotspot 编译器会在必要时对其进行优化。编译后的类会稍大一些,因为它包含调试器的信息,例如局部变量的名称。

    【讨论】:

    • 并非所有 Scala 实现都有 JIT。实际上,Scala 的 no 实现有 JIT。 Scala-native 是一个静态 AOT 编译器,可以编译为本机机器码。 Scala.js 是一个静态 AOT 编译器,可以编译为 ECMAScript 源代码。该代码可能会或可能不会在具有 JIT 的执行引擎上执行。 Scala-JVM 是一个静态 AOT 编译器,可以编译为 JVML 字节码。该字节码可能会或可能不会在具有 JIT 的执行引擎上执行。例如。 Excelsior JET JVM 没有 JIT。或者,您可以进一步将 JVM 字节码编译为 Android 字节码,成为……
    • …由没有 JIT 的 ART 执行。
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2022-08-02
    • 2013-06-17
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    相关资源
    最近更新 更多