1. 程式人生 > >深入拆解虛擬機器(七)JVM是如何實現反射的?

深入拆解虛擬機器(七)JVM是如何實現反射的?

定義

允許正在執行的Java程式觀測,甚至修改程式的動態行為


應用場景

(1)Java整合開發環境(IDE)便運用了這一功能:每當我們敲入點號的時候,IDE就會根據點號前的內容,動態展示可以訪問的欄位或者方法

(2)各種可配置框架,為了保證框架的可擴充套件性,它們往往會藉助Java的反射機制,根據配置檔案來載入不同的類。舉例來說,Spring框架的依賴反轉,便是依賴反射機制


反射呼叫

(1)在預設情況下,方法的反射呼叫為委派實現,委派給本地實現進行方法呼叫。在呼叫超過15次之後,委派實現便會將委派物件切換至動態實現。這個動態實現的位元組碼是自動生成的,它將直接使用invoke指令來呼叫目標方法

(2)方法反射呼叫會帶來不少效能開銷,原因主要有三個:變長引數方法導致的Object陣列,基本型別的 自動裝箱、拆箱,還有最重要的是方法內聯