Java虛擬機器學習 - 對象訪問

來源:互聯網
上載者:User

標籤:

對象訪問會涉及到Java棧、Java堆、方法區這三個記憶體地區。

如下面這句代碼:

[java] view plaincopyprint? 
  1. Object objectRef = new Object();  

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

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

             

             控制代碼訪問方式:java堆中將劃分出一塊記憶體來作為控制代碼池,reference中儲存的就是對象的控制代碼地址,而控制代碼中包含了對象執行個體資料和類型資料各自的具體地址資訊。

 

指標訪問方式:reference變數中直接儲存的就是對象的地址,而java堆對象一部分儲存了對象執行個體資料,另外一部分儲存了物件類型資料。

這兩種訪問對象的方式各有優勢,使用控制代碼訪問方式最大好處就是reference中儲存的是穩定的控制代碼地址,在對象移動時只需要改變控制代碼中的執行個體資料指標,而reference不需要改變。使用指標訪問方式最大好處就是速度快,它節省了一次指標定位的時間開銷,就虛擬機器而言,它使用的是第二種方式(直接指標訪問)。

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.