參考:深入了解Java虛拟機:JVM進階特性與最佳實踐(第3版) 周志明 著
建立對象是為了使用該對象,
Java
程式會通過棧上的
reference
資料來操作堆上的具體對象。由于
reference
類型在《
Java
虛拟機規範》裡面隻規定了它是一個指向對象的引用,并沒有定義這個引用應該通過什麼方式去定位、通路到堆中對象的具體位置,是以對象通路方式也是由虛拟機實作而定的,主流的通路方式主要有 使用句柄 和 直接指針 兩種。
1、通過句柄通路對象

Java
堆中将會劃分出一塊記憶體來作為 句柄池,
reference
中存儲的就是對象的句柄的位址,而句柄中包含了對象執行個體資料與類型資料各自具體的位址資訊。
優點:
reference
存儲的是穩定的句柄位址,在對象被移動(垃圾收集時移動對象是非常普遍的行為)時隻會改變句柄中的執行個體資料指針,而
reference
本身不需要改變。
缺點:增加了一次指針定位的時間開銷。
2、通過直接指針通路對象(HotSpot使用的方式)
reference
中存儲的直接就是對象位址,如果隻是通路對象本身的話,就不需要多一次間接通路的開銷。對象執行個體資料中有指向對象類型資料的指針。
優點:節省了一次指針定位的開銷。
缺點:在對象被移動時
reference
本身需要被修改。