2013-07-23 68 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用于数组大小。再次感谢。 –