建立對(duì)象是為了使用對(duì)象,我們的Java程序需要通過棧上的reference引用來操作堆上的具體對(duì)象虱歪。由于reference類型在Java虛擬機(jī)規(guī)范中只規(guī)定了一個(gè)指向?qū)ο蟮囊茫]有定義這個(gè)引用應(yīng)該通過何種方式去定位栅表、訪問堆中的對(duì)象的具體位置笋鄙,所以對(duì)象訪問方法也是取決于虛擬機(jī)的實(shí)現(xiàn)而決定的。目前主流的訪問方式有 使用句柄 和 直接指針 兩種怪瓶。
(1)通過句柄訪問對(duì)象
這里寫圖片描述
優(yōu)點(diǎn):reference存儲(chǔ)的是穩(wěn)定的句柄地址萧落,在對(duì)象被移動(dòng)(垃圾收集時(shí)移動(dòng)對(duì)象是非常普遍的行為)時(shí)只會(huì)改變句柄中的實(shí)例數(shù)據(jù)指針,而reference本身不需要改變。
缺點(diǎn):增加了一次指針定位的時(shí)間開銷找岖。
(2)通過直接指針訪問對(duì)象(HotSpot使用的方式)
這里寫圖片描述
優(yōu)點(diǎn):節(jié)省了一次指針定位的開銷陨倡。
缺點(diǎn):在對(duì)象被移動(dòng)時(shí)reference本身需要被修改。