java對象的訪問定位方式

來源:互聯網
上載者:User

標籤:java對象   java對象訪問   對象的定位   

java對象在訪問的時候,我們需要通過java虛擬機器棧的reference類型的資料去操作具體的對象。由於reference類型在java虛擬機器規範中只規定了一個對象的引用,並沒有定義這個這個引用應該通過那種方式去定位、訪問java堆中的具體對象執行個體,所以一般的訪問方式也是取決與java虛擬機器的類型。目前主流的訪問方式有通過控制代碼和直接指標兩種方式。
1.控制代碼訪問

使用控制代碼訪問方式,java堆將會劃分出來一部分記憶體去來作為控制代碼池,reference中儲存的就是對象的控制代碼地址。而控制代碼中則包含對象執行個體資料的地址和物件類型資料(如對象的類型,實現的介面、方法、父類、field等)的具體地址資訊。下邊我以一個例子來簡單的說明一下:
Object obj = new Object();
Object obj表示一個本地引用,儲存在java棧的本地便變數表中,表示一個reference類型的資料。
new Object()作為執行個體對象存放在java堆中,同時java堆中還儲存了Object類的資訊(物件類型、實現介面、方法等)的具體地址資訊,這些地址資訊所執行的資料類型儲存在方法區中。
2. 直接指標訪問
如果使用指標訪問,那麼java堆對象的布局中就必須考慮如何放置訪問類型的相關資訊(如對象的類型,實現的介面、方法、父類、field等),而reference中儲存的就是對象的地址。這兩種訪問方式各有利弊,使用控制代碼訪最大的好處是reference中儲存著穩定的控制代碼地址,當對象移動之後(垃圾收集時移動對象是非常普遍的行為),只需要改變控制代碼中的對象執行個體地址即可,reference不用修改。
使用指標訪問的好處是訪問速度快,它減少了一次指標定位的時間開銷,由於java是物件導向的語言,在開發中java對象的訪問非常的頻繁,因此這類開銷積少成多也是非常可觀的,反之則提升訪問速度。
本文參考《深入理解java虛擬機器 JVM進階特性與最佳實務》一書。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

java對象的訪問定位方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.