我將Robert Hundt的Havlak基準測試Java代碼移植到Groovy中(請參閱link)。現在我使用Groovy 2.1.1來運行基準測試,但是計算所需的持續時間幾乎相同。我做了什麼來啓用調用動態?我將groovy-2.1.1 \ indy中的groovy--indy.jars複製到groovy-2.1.1 \ lib。然後我刪除了groovy-2.1.1 \ lib所有的groovy .jars沒有「indy」的名字。此後,在IntelliJ IDEA中,我啓用並禁用了標誌文件>設置>編譯器> Groovy編譯器>調用動態支持。在什麼情況下,我們可以預期Groovy2.0 +會提高動態性能?
我只是說這讓人們看到我是否正確地打開indy支持。但這不是我的問題。我的問題是,在什麼樣的情況下,我們可以期待加快計算時間,因爲調用動態。我閱讀了關於它的文章,但是很難將在那裏解釋的關於動態調用的內容翻譯成「這種代碼將在indy支持下更快執行」的語句。 Havlak基準測試通過調用setter來改變值的循環。
如果有人對此事有所瞭解,我會很高興在這裏下載一些解釋:-)。
感謝,奧利弗
Groovy中總是做動態調度,除非原始優化路徑採取的,這是隻有在運行時可以影響特定的條件下進行。 – blackdrag 2013-03-07 09:40:23
是的,它總是做動態調度。如果您多次使用某個方法,那麼我所調用的invokedynamic只能加速執行。好吧,幾乎每個程序都是正常的情況,但應該考慮它 – Thorben 2013-03-15 12:02:52
。當通話被引導並且被鏈接到一個通知的MethodHandle時,加速就會發生。然後,您可以重新使用MethodHandle,直到出現變化。 如果沒有indy,並且在腳本語言的實現中沒有緩存技術等,調度將發生在每個單一的方法調用中。 也許這有幫助。 – Thorben 2013-03-15 12:13:54