java反射創建對象的效率是怎樣的呢?
Java中,反射是會比直接通過 new 創建對象實例來的慢,這是因為JVM 針對其做的優化,和直接創建對象是不一樣的。但是下面是幾個要注意的點
在最新版本的JVM上,反射的效率已經得到了比較大的提升。
Knuth說過,"We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil" (http://en.wikipedia.org/wiki/Program_optimization) , Performance tuning必須是基于相應的應用場景,實際的測試數據和明確的優化目標而進行的。
在反射的執行過程中,對于類及對象的定義元數據的尋找效率是比其實際執行的效率低很多的,因此這里的瓶頸在于,如何一次性的,在配置而非運行時,將相關的元數據盡早讀取到系統中來,這就引出了下面一點:
一般來說,大部分的反射構建對象元數據應該發生在系統配置階段,比如在系統啟動階段,使用反射將系統運行所需要的相關配置及動態數據讀進內存,然后在運行時,使用這些存放在內存中的元數據進行處理。
在最新的JVM中的hotspot優化,可以針對多次運行的Java Class進行有針對性的優化,因此理論上來說,Java代碼執行的次數越多,則針對其的優化效果也越明顯。