2012-12-04 49 views
0

我知道反射比較慢,因爲所有檢查/驗證都是在運行時執行的。在服務器上運行的jvm反射速度真的很慢

假設我正在使用反射和調用方法實例化一個類。 所以我的問題是調用總是會很慢(即使比正常情況慢1%)還是隻有第一次?假設這個類是我的Web應用程序的一部分,它被多次調用。

我的困惑的另一個角度是,現在大多數現代JVM使用JIT編譯器。所以JVM不會嘗試優化後續的調用。

+0

您是否反射地調用該方法?或者只是反射性地實例化對象? – EJP

+0

只是反射性地實例化對象。 –

回答

1

是的,調用總是很慢。 JIT編譯器優化Java字節碼並將其編譯爲本地代碼;它不會記憶或緩存方法的結果,調用反射API意味着調用方法。編譯好的本地代碼在每次調用時仍會調用運行時的反射設施,並且是緩慢的。

調用一個使用反射的方法比直接調用它要慢得多。但是請注意,該方法的主體將以正常速度執行 - 只是調用方法的過程會很慢。

一如既往,剖析你的代碼。如果經由反射的實例化和方法調用變成瓶頸,則相應地優化。 (例如,如果調用的方法是查詢數據庫,那麼該操作很可能是瓶頸,並且由反射引入的開銷不太可能成爲問題。)

1

是的,即使在連續通話時,速度也會變慢。這很慢,因爲必須有調用設置和拆除行爲,否則這些行爲將由編譯器在字節代碼中進行硬編碼。

相關問題