首頁  >  文章  >  Java  >  詳解介紹java虛擬機器中物件存取(圖)

詳解介紹java虛擬機器中物件存取(圖)

黄舟
黄舟原創
2017-03-25 10:36:201369瀏覽

這篇文章主要介紹了java 虛擬機器中物件存取詳解的相關資料,需要的朋友可以參考下

java 虛擬機器中物件存取詳解

物件存取會涉及到Java堆疊、Java堆疊、方法區這三個記憶體區域。

如下面這句程式碼:

Object objectRef = new Object();

       假設這句程式碼出現在方法體中,"Object objectRef」 這部分將會反映到Java堆疊的本機變數中,作為一個reference類型資料出現。而「new Object()」這部分將會反映到Java堆中,形成一塊存儲Object類別型所有實例資料值的結構化內存,根據具體類型以及虛擬機實現的物件內存佈局的不同,這塊記憶體的長度是不固定。另外,在java堆中還必須包括能查找到此物件類型資料(如物件類型、父類別、實作的介面、方法等)的位址信息,這些資料型別儲存在方法區中。

      reference類型在java虛機規格裡面只規定了一個指向物件的引用位址,並沒有定義這個引用應該透過那種方式去定位,存取到java堆中的物件位置,因此不同的虛擬機器實現的存取方式可能不同,主流的方式有兩種:使用句柄和直接指標。

             句柄存取方式:java堆中將分割出一個記憶體來作為句柄池,reference中儲存的是物件的句柄位址,而句柄中包含了一個物件實例資料和類型資料各自的具體地址資訊。

詳解介紹java虛擬機器中物件存取(圖)

指標存取方式:reference變數中直接儲存的就是物件的位址,而java堆物件一部分儲存了物件實例數據,另外一部分則存儲了物件類型資料。

這兩種存取物件的方式各有優勢,使用句柄存取方式最大好處就是reference中儲存的是穩定的句柄位址,在物件移動時只需要改變句柄中的實例資料指針,而reference則不需要改變。使用指標存取方式最大好處就是速度快,它節省了一次指標定位的時間開銷,就虛擬機而言,它使用的是第二種方式(直接指標存取)。

以上是詳解介紹java虛擬機器中物件存取(圖)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn