深入理解java虛擬機器---對象的建立過程(八)

來源:互聯網
上載者:User

標籤:高並發   方式   存在   color   span   分享   圖片   bubuko   round   

  1.對象的建立過程

由於類的載入是一個很複雜的過程,所以這裡暫時略過,後面會詳細講解,預設為是已載入過的類.著重強調對象的建立過程.

 注意: 最後一步的init方法是代碼塊和構造方法.

以上是總圖,下面分步驟詳細講解

A: 虛擬機器為對象分配記憶體方式

  1. 指標碰撞: 堆記憶體規整時,這時就可以把其看做一半連續記憶體被佔用,一半連續的記憶體空閑.所以當建立新對象時,從閒置記憶體中分配空間給新對象

  2.空閑列表: 堆記憶體是不連續的,這就需要虛擬機器維護一個記憶體列表,用於記錄當前記憶體是否被佔用,當新建立對象時,查詢這個表看哪裡有空閑並分配給新對象佔用,所以這種方式就叫做空閑列表

虛擬機器選擇哪種記憶體配置方式主要看堆記憶體是否規整.堆記憶體是否規整則是有記憶體回收行程策略確定.當記憶體回收行程策略可以實現將堆記憶體清理的很規整,那麼虛擬機器就使用指標碰撞方式,否則使用空閑列表方式

B:安全執行緒問題

在高並發時,同時堆記憶體建立多個對象.當空閑列表中一個空閑記憶體配置給其中一個對象,但是還沒來得及更新空閑列表.這時新的對象進來也被分配相同的記憶體空間.那麼就會產生安全執行緒問題.

解決方式:

  A: 使用線程同步(加鎖),一個線程進來,加鎖.不讓第二個線程進來

  B; 本地線程分配緩衝: 將堆記憶體為每個線程分配單獨的地區,即每個線程操作各自的地區,各不影響.

C:初始化對象

 任何對象建立後,都有會初始化值.此步驟後對象已經在堆中存在

D: 執行構造方法

構造方法為對象中的屬性賦值.

 

深入理解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.