仅包含基本类型的Java对象的大小

时间:2013-07-23 19:05:26

标签: java object sizeof primitive unsafe

我有一个只包含以下基本类型的类:

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。

1 个答案:

答案 0 :(得分: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之类的东西,但如果你决定对其进行单元测试或其他什么,那么简单测试最终会造成严重破坏。
  • 为变量提供有意义的名称。如果我有机会,我会这样做,但我真的不能用现在的名字做任何事情。

如果你正在寻找一个通用函数,那么事情变得更加困难,在这种情况下,你会寻找一个带有跟随签名的方法:SizeTester.getSize(Object object);,它仍然是可行的,但你需要然后使用Reflection来获取有关字段的信息,如果绝对必要,你应该只使用它。