JVM如何?對象訪問(詳解),jvm實現對象詳解

來源:互聯網
上載者:User

JVM如何?對象訪問(詳解),jvm實現對象詳解

上一篇文章,介紹了JVM的運行時資料區


     接下來,我們來討論JVM中對象是如何分配以及訪問對象的呢?這個過程將會涉及到上一篇文章中說的虛擬機器棧、堆、方法區這3個重要的記憶體地區。


如,下面這句代碼:

ClassA  object = new ClassA();

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

在Java虛擬機器規範中,對於通過reference類型引用訪問具體對象的方式並未做規定,目前主流的實現方式主要有兩種:

1、通過控制代碼訪問,Java堆中將會劃分出一塊記憶體來作為控制代碼池,reference中儲存的就是對象的控制代碼地址,

而控制代碼中包含了對象執行個體和類型資料各自的具體地址資訊,如所示:



2、通過直接指標訪問,Java堆對象的布局中就必須考慮如何放置存取方法區中類型資料的相關資訊,

reference中直接儲存的就是對象執行個體的地址,如所示



總結:

這2中對象的訪問方式各有優勢,使用控制代碼訪問方式的最大好處就是reference中儲存的是穩定的控制代碼地址。

而使用直接指標的最大好處就是速度更快。

  • 上一篇Java虛擬機器記憶體地區詳解
1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.