首頁 >Java >java教程 >Java虛擬機器學習 - 物件訪問

Java虛擬機器學習 - 物件訪問

黄舟
黄舟原創
2017-03-18 17:51:441527瀏覽

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

如下面這句程式碼:

Object objectRef = new Object();

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

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

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

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


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

 以上就是Java虛擬機器學習 - 物件存取的內容,更多相關內容請關注PHP中文網(www.php.cn)!

相關文章:

Java虛擬機的具體詳情

深入理解Java虛擬機

Java

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