java對象在內存中的結構


在HotspotJVM中,32位機器下,Integer對象的大小是int的幾倍?

我們都知道在java語言規范已經規定了int的大小是4個字節,那么Integer對象的大小是多少呢?要知道一個對象的大小,那么必須需要知道對象在虛擬機中的結構是怎樣的,來看看Hotsopt中對象在內存中的結構:

在上面這張圖里面可以看出,對象在內存中的機構主要包含以下幾個部分:

  • Mark Word:對象的Mark Word部分占4個字節,其內容是一系列的標記位,比如輕量級的標記位,偏向鎖標記位等等。
  • Class對象指針:Class對象指針的大小也是4個字節,其指向的位置是對象對應的Class對象(其對應的元數據對象)的內存地址
  • 對象實際數據:這里面包括了對象的所有成員變量,其大小由各個成員變量的大小決定,比如:byte和boolean是1個字節,short和char是2個字節,int和float是4個字節,long和double是8個字節,refrence是4個字節。
  • 對齊:最后一部分是對齊填充的字節,按8個字節填充

根據上面的圖,那么我們可以得出Integer的對象的結構如下:

Integer只有一個int類型的成員變量value,所以其對象實際數據部分的大小是4個字節,然后再在后面填充4個字節達到8字節的對齊,所以可以得出Integer對象的大小是16個字節。

因此,我們可以得出Integer對象的大小是原生的int類型的4倍。

關於對象的內存結構,需要注意數組的內存結構和普通對象的內存結構稍微不同,因為數據有一個長度length字段。所以在對象頭后面還多了一個int類型的length字段,占4個字節,接下來才是數組中的數據。如下圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM