2013-07-23 94 views
-1

我有一個只包括以下基本類型的類的Java對象的大小:只包含基本類型

public class Test{ 

private int a1; //size of int =4 
private long a2; //size of long = 8 
private double a3[]; //size of double =8 

} 

而且,我對這個班這樣一個對象:

Test test= new Test(1,3,new double[] {0.1, 0.2, 0.3, 0.4}); 

我想有一個功能,會發現這個物體的大小,在這種情況下,它會返回4 + 8 + 4 * 8 = 44

+0

我對該對象的總大小不感興趣,但只在所用的基本變量的總大小上感興趣,如給出的示例中所示。 –

+0

然後... http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html –

+0

http://btoddb-java-sizing.blogspot.com/適用於64位JVM上的大小; 32位JVM使用4字節內存對齊方式而不是8字節內存對齊方式,因此整數和浮點數將佔用4個字節而不是8個 –

回答

1

如果我理解正確的問題,那麼它是某物你可以很容易實現的事情,但在這裏我們去:

public class Test { 
    private int a1; 
    private long a2; 
    private double a3[]; 

    public Test(final int a1, final long a2, final double[] a3) { 
     this.a1 = a1; 
     this.a2 = a2; 
     this.a3 = a3; 
    } 

    public int getSize() { 
     return 4 + 8 + (a3.length * 8); 
    } 
} 

另外幾個注意事項:使用Test作爲類名,你應該使用類似SizeTest也好,

  • 副歌只是簡單測試將如果你決定單元測試它或者什麼都最終會造成嚴重破壞。
  • 賦予變量有意義的名稱。如果我有這樣的oppurtunity,我會這樣做,但我真的不能用現在的名字做任何事情。

如果你正在尋找一個通用的功能,那麼好東西轉了很多困難,在這種情況下,你要尋找具有下面簽名的方法:SizeTester.getSize(Object object);,它仍然是可行的,但你需要使用反射,然後獲取有關字段的信息,你應該只使用,如果絕對必要的。

+0

謝謝你的回答,但顯然我正在尋找一個通用函數。 –

+0

最後,我通過使用hashMap手動計算大小,其中我爲每個類型存儲不同的大小,此外array.length * type_size用於數組大小。再次感謝。 –