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 } 在我的机器上,第二个至少与第一个一样快(有时更快),尽管第二个看起来需要每隔一次迭代创建一个函数. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |