建立對象是爲了使用對象,Java程序通過棧上的reference數據來操作堆上的具體對象。
目前主流的訪問方式有使用句柄和直接指針兩種。
使用句柄訪問
如果使用句柄訪問方式,Java堆中將會劃分出一塊內存來作爲句柄池,reference中存儲的就是對象的句柄地址,而句柄中包含了對象實例數據和類型數據各自的具體地址信息如下圖所示:
使用直接指針訪問
如果使用直接指針訪問方式,java堆對象的佈局中就必須考慮如何放置訪問類型數據的相關信息,reference中直接存儲的就是對象地址。如下圖所示:
後記
這兩種對象的訪問方式各有優勢。
使用句柄訪問方式的最大好處就是reference中存儲的是穩定的句柄地址,在對象被移動時只會改變句柄中的實例數據指針,而reference本身不需要被修改。
使用直接指針訪問方式的最大好處就是速度更快,它節省了一次指針定位的的時間開銷。