java執行原理、靜態代理和動態代理區分

一樂樂發表於2022-02-28

1、java的編譯和執行原理:

■ 編譯:將原始檔 .java 檔案,通過編譯器(javac 命令) 編譯成 位元組碼檔案 .class 檔案。

■ 執行,通過類載入器(以二進位制流形式)把位元組碼載入進JVM,通過java解析器(java 命令) 進行執行程式。

先將java原始檔進行編譯生成位元組碼檔案,然後通過類載入器ClassLoader (以二進位制流形式) 載入進虛擬機器,然後通過java解析器或即使編譯器進行執行。

image



2、靜態代理和動態代理:

■ 靜態代理:(經歷了編譯和執行)

在程式執行前就已經存在代理類的位元組碼檔案(因為通過了編譯階段),代理物件和真實物件的關係在執行前就確定了(因為通過了編譯階段)。


■ 動態代理:(只經歷了執行,我們通過某種手段得到的位元組碼【遵循位元組碼格式和結構】)

動態代理類是在程式執行期間由jvm通過反射等機制動態生成的,所以不存在代理類的位元組碼檔案(因為沒有經歷編譯階段),代理物件和真實物件的關係是在程式執行期間才確定的


● 如何動態建立一份位元組碼?(實現了在程式碼中動態建立一個類的能力)

通過java的編譯和執行原理,可以看到:在執行時期,是jvm通過位元組碼的二進位制資訊來載入類的

所以,當我們在執行時期,通過java編譯系統組織.class檔案的格式和結構,生成相應的二進位制資料,然後再把這個二進位制資料載入轉換成對應的類


相關文章