gpt4 book ai didi

java - 通过Java Reflection/Scala Reflection调用实例方法: Which one is faster?

转载 作者:行者123 更新时间:2023-12-01 09:43:31 25 4
gpt4 key购买 nike

对于简单的类定义:

class Example {

def r() = Random.nextLong() + Random.nextLong() //I'm using scala utility class to be succinct
}

当类“Example”和函数名“fn”都是动态的,但在编译时已知时,有两种调用 r() 的方法(这可以最大限度地减少重复调用“fn”的开销) ): Java 反射和 Scala 反射。

Java Reflection 有一个更简单的 API:您只需使用 Class.getMethodWithParameterType 来获取反射方法,它就可以立即应用于 Example 类的任何实例。

Scala 反射更加复杂:对于 Example 类的每个实例,您需要首先获取实例镜像,然后使用它来调用方法。

令我惊讶的是,即使如此复杂,Scala Reflection 似乎也更快(参见 Scala TypeTags and performanceFaster alternatives to Java's reflection 的答案进行比较)。有人能证实我的猜测吗?造成这种差距的原因是什么?

非常感谢您的见解。

最佳答案

对于方法调用,Scala reflection uses Java reflection ,所以它几乎不可能更快。

Scala Reflection seems to be faster (see answers of Scala TypeTags and performance and Faster alternatives to Java's reflection for a comparison)

如果您只比较数字,Scala 反射似乎要慢得多:Java 需要约 0.4 秒进行 5000 万次迭代,Scala 需要约 0.01 秒进行 100 次迭代。

但是,当然你根本无法比较这些数字:它们是在不同的计算机上完成的,具有不同的设置、不同的 JVM 版本、不同的预热,Scala 每次都会查找该方法,Java 一次获取该方法并调用多次次数、测量方法不同等等等等

关于java - 通过Java Reflection/Scala Reflection调用实例方法: Which one is faster?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38256422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com