1. 程式人生 > >Java虛擬機器的直接引用和符號引用

Java虛擬機器的直接引用和符號引用

Java類從載入到虛擬機器記憶體中開始,到卸載出記憶體為止,它的整個生命週期包括,載入 ,驗證 , 準備 , 解析 , 初始化 , 解除安裝 ,總共七個階段。其中驗證 ,準備 , 解析 統稱為連線。

而在解析階段會有一個步將常量池當中二進位制資料當中的符號引用轉化為直接引用的過程。

符號引用 :符號引用以一組符號來描述所引用的目標。符號引用可以是任何形式的字面量,只要使用時能無歧義地定位到目標即可,符號引用和虛擬機器的佈局無關。個人理解為:在編譯的時候一個每個java類都會被編譯成一個class檔案,但在編譯的時候虛擬機器並不知道所引用類的地址,所以就用符號引用來代替,而在這個解析階段就是為了把這個符號引用轉化成為真正的地址的階段。

直接引用 :直接引用和虛擬機器的佈局是相關的,不同的虛擬機器對於相同的符號引用所翻譯出來的直接引用一般是不同的。如果有了直接引用,那麼直接引用的目標一定被載入到了記憶體中。

直接引用可以是:

1:直接指向目標的指標。(個人理解為:指向物件,類變數和類方法的指標)

2:相對偏移量。 (指向例項的變數,方法的指標)

3:一個間接定位到物件的控制代碼。