java物件訪問模式
阿新 • • 發佈:2019-01-06
1. java物件訪問模式
為什麼我們要引入java物件訪問模式,我們知道Object obj = new Object();但是裡面的具體細節,我們還不是特別瞭解。
分析:Object obj 其實就是宣告一個物件。保持在棧記憶體之中,也儲存了堆記憶體的引用
new Object() 其實是例項化物件,該物件儲存在堆記憶體之中。
但是我們應該知道obj如何得到例項化物件的地址?
引用資料型別分為兩種模式
控制代碼訪問:
JAVA堆中將會劃分出來一塊記憶體作為控制代碼池,reference中就是儲存了物件的控制代碼地址,而控制代碼中包含了物件例項資料和型別資料各自的具體地址資訊。
使用控制代碼訪問的最大好處是reference中儲存的是穩定的控制代碼地址,在物件被移動時,只會改變控制代碼中的例項資料指標,而reference本身不需要被修改。
直接指標訪問:
相比較控制代碼的訪問方式,JAVA堆中不會單獨劃分記憶體,reference中直接儲存了物件地址,而物件中包含了物件型別資料的地址資訊。
使用直接指標的最大好處就是速度更快,節省了一次指標定位需要的時間開銷,由於JAVA物件訪問十分頻繁,這類開銷積小成多後也是一項非常可觀的執行成本。Sun HotSpot虛擬機器使用的就是這種訪問方式。
- 該模式沒有控制代碼池的概念
- 在JVM中是直接利用物件儲存模式,即直接儲存具體的物件
- 該策略省略了控制代碼到物件間的查詢,而後該物件直接進行java方法區的呼叫
為什麼java使用直接指標訪問?(正在研究)