對象的訪問定位

Java程序經過棧上的reference數據來操做堆上的具體對象框架

  • 目前主流的訪問方式由「使用句柄」和「直接指針」。

若是使用句柄訪問的話,佈局

  • Java堆中將會劃分出一塊內存來做爲句柄池,
  • reference中存儲的就是對象的句柄地址
  • 句柄中包含了對象實例數據與類型數據的具體各自的地址信息
  • 以下圖:

若是使用直接指針訪問的話,指針

  • Java堆對象的佈局中就必須考慮如何放置訪問類型數據的相關信息,
  • reference中存儲的直接就是對象地址
  • 以下圖:

兩者對比對象

  • 使用句柄來訪問的最大好處就是reference中存儲的是穩定句柄地址,
    • 在對象被移動(垃圾收集時移動對象是很是廣泛的行爲)時只會改變句柄中的實例數據指針,
    • 而reference自己不須要被修改。
  • 使用直接指針來訪問最大的好處就是速度更快,
    • 它節省了一次指針定位的時間開銷,
    • 因爲對象訪問的在Java中很是頻繁,
    • 所以這類開銷積小成多也是一項很是可觀的執行成本。

HotSpot而言,他使用的是直接指針訪問方式進行對象訪問,但從整個軟件開發的範圍來看,各類語言和框架使用句柄來訪問的狀況也十分常見。blog

相關文章
相關標籤/搜索