jvm學習筆記(2)——java對象的內存佈局

一、內存佈局:

     一個java對象在內存中可分爲3個區域:對象頭(Header)、實例數據(Instance Data)、對齊填充(Padding)。

  1. 對象頭(兩部分):
    1. 對象自身運行時的數據。如哈希碼、GC分代年齡、鎖狀態標誌、線程持有的鎖、偏向線程ID、偏向時間戳等。
    2. 類型指針。即對象指向它的類元數據的指針,虛擬機通過這個指針確定這個對象是哪個類的實例。對象的訪問定位就是通過這個來確認的,如後面的圖片所示。
  2. 實例數據:真正的有效數據。
  3. 對齊填充:沒有特殊含義,啓佔位符的作用。HotSpot VM的自動內存管理系統要求,對象大小必須是8字節的整數倍,也就是64位的整數倍。

二、對象的訪問定位:

三、思考:

    搞技術的,學習技術的使用只是最淺的一層也是最容易變化的,最重要的是設計的思想,也是較少變化的。比如java對象的內存佈局,和http的請求就很類似,也是增加header部分,把數據運轉時的狀態和數據本身拆分開來。更深一層的來說,就是職責更加明確,類似的如面向對象設計的原則之一——單一職責,體現的也就是高內聚低耦合的思想,也就是小而美而不要大而全。(PS:你咋不說上升到哲學高度,萬事萬物道理相同呢。。。哈哈。。)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章