基於Hotspot和java堆為例的對象分析

來源:互聯網
上載者:User

標籤:設定   並發   方案   常量   記錄   頻繁   方式   建立   資料   

1.對象的建立

    首先虛擬機器遇到一條new指令時,將去檢查這個指令的參數是否能在常量池中定位到一個類的符號引用,並且檢查這個符號引用代表的類是否已被載入、解析和初始化過。如果沒有,那必須先執行相應的類載入過程。

    在類載入檢查通過後,接下來虛擬機器將為新生對象分配記憶體。對象所需記憶體的大小在類載入完成後便可完全確定,為對象分配空間的任務等同於把一塊確定大小的記憶體從java堆中劃分出來。

   這裡介紹兩種分配方式:指標碰撞:假設java 堆記憶體是規整的,所有用過的記憶體放一邊,閒置記憶體放另一邊,中間放著一個指標作為分界點的指標,那麼分配記憶體大小就是僅僅把那個指標向空閑那邊挪動一段與對象大小想等的距離。

                                          空閑列表:如果java堆記憶體不是規整的,就必須維護一個列表,記錄上哪些記憶體塊是可用的,在分配時候從列表中找到一塊足夠大的空間劃分給對象執行個體,並更新列表上的記錄。

          除如何劃分可用空間之外,還有另外一個需要考慮的問題,對象建立是非常頻繁的行為,在並發情況下線程存在安全問題,

  兩種解決方案:1.對分配記憶體空間的動作進行同步處理

                            2.吧記憶體配置的動作按照線程劃分在不同的空間之中進行,即每個線程在java堆中預先分配一小塊記憶體,稱為本地線程分配緩衝(Thread LOcal Allocation Buffer,TLAB)哪個線程要分配記憶體,就在哪個線程的TLAb上分配,只有TLAB用完並分配新的TLAB是,才需要同步鎖定。

        接下來虛擬機器要對對象進行必要的設定。例如這個對象是哪個類的執行個體、如何才能找到類的中繼資料資訊、對象的哈戲碼、對象的GC分代年齡等資訊。

       接下來就是一些init初始化。

 

基於Hotspot和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.