簡體   English   中英

通過Java Reflection / Scala Reflection調用實例方法:哪個更快?

[英]Invoking instance method through Java Reflection/Scala Reflection: Which one is faster?

對於簡單的類定義:

class Example {

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

當類“ Example”和函數名稱“ fn”都是動態的時,有兩種方法可以調用r() ,但是在編譯時就已經知道(這可以最大程度地減少重復調用“ fn”的開銷):Java Reflection和Scala反射。

Java Reflection有一個更為簡單的API:您只需使用Class.getMethodWithParameterType來獲得一個反射方法,它可以立即應用於Example類的任何實例。

Scala反射更為復雜:對於Example類的每個實例,您需要首先獲取一個實例鏡像,然后使用它來調用該方法。

讓我感到驚訝的是,即使具有如此復雜的功能,Scala Reflection似乎也更快(請參閱Scala TypeTag和性能的答案以及Java反射的Faster替代品進行比較)。 誰能證實我的猜測? 造成這種差距的原因是什么?

非常感謝您的任何見解。

對於方法調用, Scala反射使用Java反射 ,因此幾乎不可能更快。

Scala反射似乎更快(請參閱Scala TypeTag和性能的答案以及Java反射的更快替代品以進行比較)

如果只是比較數字,Scala的反映似乎要慢得多:Java進行5000萬次迭代大約需要0.4秒,而Scala進行100次迭代需要大約0.01秒。

但是當然您根本無法比較這些數字:它們是在不同的計算機,不同的設置,不同的JVM版本,不同的預熱下完成的,Scala每次在Java獲得一次並多次調用時都在查找該方法,測量的方法不同,等等,等等,等等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM