天天看點

java中基本類型封裝對象所占記憶體的大小(轉)

這是一個程式,java中沒有現成的sizeof的實作,原因主要是java中的基本資料類型的大小都是固定的,是以看上去沒有必要用sizeof這個關鍵字。

實作的想法是這樣的:java.lang.Runtime類中有一些簡單的能涉及到記憶體管理的函數:

Every Java application has a single instance of class <code>Runtime</code> that allows the application to interface with the environment in which the application is running. The current runtime can be obtained from the <code>getRuntime</code>method.

這個例子寫的很好,正好說明了java中基本類型封裝對象所占記憶體的大小.   

  1.簡單的Object對象要占用8個位元組的記憶體空間,因為每個執行個體都至少必須包含一些最基本操作,比如:wait()/notify(),equals(),   hashCode()等   

  2.使用Integer對象占用了16個位元組,而int占用4個位元組,說了封裝了之後記憶體消耗大了4倍   

  3.那麼Long看起來比Integer對象應該使用更多空間,結果Long所占的空間也是16個位元組.   

  那麼就正好說明了JVM的對于基本類型封裝對象的記憶體配置設定的規則是如下:   

  Object所占記憶體(8個位元組)+最大基本類型(long)所占記憶體(8個位元組)   =   16位元組.   

  JVM強制使用8個位元組作為邊界.   

  是以所有基本類型封裝對象所占記憶體的大小都是16位元組.但是還是有差別,比如:Integer對象雖然占用了16個位元組的記憶體,但是隻是利用了Object所占記憶體(8個位元組)+int所占記憶體(4個位元組)   =   12位元組.還有4個位元組根本沒有被使用.呵呵,仔細分析了一晚,還是有很多收獲的.  

<a href="http://blog.csdn.net/dkarthas/article/details/1570469">http://blog.csdn.net/dkarthas/article/details/1570469</a>