首頁>Club>
一般說java反射效率低,是不是指反射建立一個物件所用的時間比直接new一個物件用的時間更長?這個效率主要是針對時間?假如我建立物件是線上程進行並且不考慮時間問題是不是可以用反射來代替new物件?之所以有這樣的問題是因為我要在基類建立泛型類物件例項,避免在每個子類new物件,減少重複程式碼。
4
回覆列表
  • 1 # 人生路誰主沉浮

    建議題主看一下jdk proxy,javassit或者cglib是如何透過反射來完成代理模式的!反射用的場景最多的就是代理模式,而代理模式被眾多的框架(Spring,Mybatis,Dubbo等等)使用!當然,對反射的理解爭議性也很大!

  • 2 # HongyeLinux

    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程式碼執行的次數越多,則針對其的最佳化效果也越明顯。

  • 中秋節和大豐收的關聯?
  • 為什麼,你總是不能安於現狀?