java反射性能
Ⅰ java反射的性能為什麼低
java反射需要將內存中的對象進讓察行解析,涉及到與底層c語言的交互,速度會比較慢。
java反射得到的每一個Method都有一個root,不暴漏給外部,而是每鎮滑好次一個Method。具體的反射調用邏輯是委託給MethodAccessor的,而accessor對象會御鉛在第一次invoke的時候才創建,是一種lazy init方式。而且默認Class類會cache method對象。目前MethodAccessor的實現有兩種,通過設置inflation,一個native方式,一種生成java bytecode方式。native方式啟動快,但運行時間長了不如java方式,個人感覺應該是java方式運行長了,jit compiler可以進行優化。所以JDK6的實現,在native方式中,有一個計數器,當調用次數達到閥值,就會轉為使用java方式。默認值是15。java方式的實現,基本和非反射方式相同。
Ⅱ java面試題:如何提高反射效率
1、在系統啟動階段使用反射。
2、將反射得到元數據保存起來,使用時,只需從內存中調用即可。
3、hotspot虛擬機會對執行次數較多的方法進行優化(例如使用jit技術)。
4、使用高性能的反射庫,應該會比自己寫緩存效果好。
Ⅲ java反射究竟消耗多少效率
首先明確概念
String str = new String();
上面的String稱為『類』,str指向的目標稱為『實體』。到此無法理解的話,請溫習java面向對象的基礎後再往下閱讀。
反射實現的核心是Class類。運行時,每一個類都對應一個Class實體,利用這些實體完成反射行為。這些實體是在jvm進行類載入時完成創建的,不論是否有反射操作,所以和反射的開銷無關。
反射機制是對人來說的一種邏輯特徵,對計算機來說,和普通的方法調用沒有任何區別,所以在編譯階段的開銷差距不大,可能會更小(因為引包更少)。
java是強類型語言,反射能夠在使用上弱化這種『強』。正常的實體創建和方法調用,是通過地址直接調用的,而反射是通過字元串的匹配來定址,再按地址調用,中間多出一步定址。定址的開銷在執行實體內部方法以及靜態方法時和Map類的鍵值對定址開銷相同,基本可以忽略。構造方法稍微復雜一點,但差距也不大。
綜上,就本人考慮到的內容,反射相比直接調用,只增加了簡單幾步定址過程,不會對效率造成太大影響。
Ⅳ JAVA中反射是什麼
JAVA中反射是動態獲取信息以及動態調用對象方法的一種反射機制。
Java反射就是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;並且能改變它的屬性。而這也是Java被視為動態語言的一個關鍵性質。
Java反射的功能是在運行時判斷任意一個對象所屬的類,在運行時構造任意一個類的對象,在運行時判斷任意一個類所具有的成員變數和方法,在運行時調用任意一個對象的方法,生成動態代理。
(4)java反射性能擴展閱讀:
JAVA中反射實例:
1、Class superClass=clazz.getSuperclass();//獲取父類。
System.out.println("getSuperclass:"+superClass)。
2、Class[] interfaces=clazz.getInterfaces();//獲取實現介面。
System.out.println("getInterfaces:"+interfaces.length)。
3、Constructor[] cons=clazz.getConstructors();//構造方法。
System.out.println("getConstructors:"+cons.length)。
參考資料來源:網路: JAVA反射機制