对象的访问方式
對象訪問方式
??????? 雖然定義的reference類型數據來作為對象內存數據的引用,但JVM規范沒有定義這個引用應該通過何種方式定位、訪問堆上的對象,也沒有不強制規定對象的內部結構應當如何表示;????
??????? 這些都取決于JVM的實現,目前主流的對象訪問方式有兩種:
(A)、使用句柄
???????Java堆劃分一塊內存作為句柄池,reference中存儲就是對象的句柄地址;
??????? 對象句柄包含兩個地址:
???????(1)、在堆中分配的對象實例數據的地址;
???????(2)、這個對象類型數據地址;????
??????? 如圖所示:
??????? 優點:對象移動時(垃圾回收時常見的動作),reference不需要修改,只改變句柄中實例數據指針;????????????????
(B)、使用直接指針
???????reference中存儲就是在堆中分配的對象實例數據的地址;
???????而對象實例數據中需要有這個對象類型數據的相關信息(前面文章討論了HotSpot使用對象頭來存儲對象類型數據地址);
??????? 如圖所示:
??????? 優點:對象訪問時節省了一次指針定位的時間開銷,速度更快;
???????由于對象訪問非常頻繁進行,所以能較好提升性能;
???????HotSpot虛擬機使用了直接指針的方式訪問對象;
?
總結
- 上一篇: Java的编译方式
- 下一篇: Spring之装配Bean(一)