Java虛擬機在運行Java程序的時候會將它所管理的內存區域劃分為多個不同的區域。每個區域都有自己的用途,創建以及銷毀的時間。有的隨著虛擬機的啟動而存在,有的則是依賴用戶線程來啟動和銷毀。
Java堆中會劃分出一塊內存來作為句柄池,reference中存儲的就是對象的句柄地址,而句柄中包含了對象的實例數據和類型數據各自的具體地址信息。
使用直接指針的訪問方式,reference中存放的就直接是對象的地址。
使用句柄訪問方式的最大好處就是reference中存放的是穩定的句柄地址,在對象被移動(垃圾收集時移動對象時非常普遍的行為)時只需要修改句柄中的實例數據指針,而reference本身不用修改。
使用直接指針訪問方式的最大好處就是速度更快,它節省了中間一次指針定位的時間開銷,對象的訪問在Java中非常頻繁,這類開銷積少成多也是非常可觀的執行成本。
各個廠商的虛擬機不同,Sun HotSpot虛擬機采用的是直接指針訪問方式進行對象的訪問。