java 物件模型(轉 32位系統)

來源:互聯網
上載者:User

在Sun JVM中,(除了數組之外的)對象都有兩個機器字(words)的頭部。第一個字中包含這個對象的標示雜湊碼以及其他一些類似鎖狀態和等標識資訊,第二個字中包含一個指向對象的類的引用。另外,任何對象都是8個位元組為粒度進行對齊的。這就是對象記憶體布局的第一個規則:

規則1:任何對象都是8個位元組為粒度進行對齊的。

比如,如果調用new Object(),由於Object類並沒有其他沒有其他可儲存的成員,那麼僅僅使用堆中的8個位元組來儲存兩個字的頭部即可。

繼承了Object的類的記憶體布局

除了上面所說的8個位元組的頭部,類屬性緊隨其後。屬性通常根據其大小來排列。例如,整型(int)以4個位元組為單位對齊,長整型(long)以8個位元組為單位對齊。這裡是出於效能考慮而這麼設計的:通常情況下,如果資料以4位元組為單位對齊,那麼從記憶體中讀4位元組的資料並寫入到處理器的4位元組寄存器是性價比更高的。

為了節省記憶體,Sun VM並沒有按照屬性聲明時的順序來進行記憶體布局。實際上,屬性在記憶體中按照下面的順序來組織:

1. 雙精確度型(doubles)和長整型(longs)

2. 整型(ints)和浮點型(floats)

3. 短整型(shorts)和字元型(chars)

4. 布爾型(booleans)和位元組型(bytes)

5. 參考型別(references)

記憶體使用量率會通過這個機製得到最佳化。例如,如下聲明一個類:

1 2 3 4 5 6 7 8 9 10 11 12 13 class MyClass {           byte a;           int c;           boolean d;           long e;           Object f;            }

如果JVM並沒有打亂屬性的聲明順序,其對象記憶體布局將會是下面這個樣子:

 

1 2 3 4 5 6 7 8 9 [HEADER:  8 bytes]  8 [a:       1 byte ]  9 [padding: 3 bytes] 12 [c:      
相關文章

聯繫我們

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