JAVA的對象訪問定位

建立對象是爲了訪問對象,Java程序經過棧的引用(reference)數據來操做堆上的對象。因爲reference類型在Java虛擬機規範中只規定了一個指向對象的引用。並無規定經過該引用怎麼定位,訪問堆中的對象。具體須要看虛擬機的實現。佈局

兩種訪問方式:spa

  • 句柄訪問
  • 直接訪問

句柄訪問

Java堆中會劃分一個句柄池,reference存儲的就是對象的句柄地址,而句柄中存放的是對象的實例數據和類型數據的地址信息。

image-20201023232424966

直接訪問

Java堆對象佈局就必須考慮如何存放訪問類型數據的相關信息,reference存儲的就是對象的地址。

image-20201023232718060

句柄訪問和直接訪問的特色

  • 句柄訪問:reference存放的是句柄地址(比較穩定),在對象移動時(垃圾回收),只會改變句柄中實例數據的地址,而reference無需改變。
  • 直接訪問:因爲節省了一次指針開銷訪問速度比較快,因爲對象的訪問在Java堆上訪問特別頻繁。Sun HotSpot虛擬機採用的是直接訪問。

相關文章
相關標籤/搜索