如何在JAVA中找到通用数据类型大小?

时间:2015-09-01 06:47:48

标签: java

我已针对此问题尝试了T.SIZE/8,但却给了我一个错误。

我也试过Integer.Size这给了我一个正确的解决方案4 bytes

那么如何在JAVA中找到SIZE for Generic数据类型?

我的计划:

class A<T> {
  T a;
  T b;
  A(T a, T b) {
    this.a = a;
    this.b = b;
  }
  void s() {
    System.out.print("size in byte is "+(T.SIZE/8)+"bytes");
  }
}

class Demo {
  static public void main(String a[]) {
    A<Integer> ob = new A<Integer>(10, 20);
    ob.s();
  }
}

1 个答案:

答案 0 :(得分:1)

简答:你不能。 由VM决定字段的排序和对齐方式,因此大小取决于VM的实现和配置。但是,您可以使用Java虚拟机工具接口(JVMTI)附加本机代理来查询对象的大小。但是,在您的情况下,这可能会有点过于强大,如果您真的需要,还值得提出另一个问题。

肮脏的黑客:你也可以猜测它#34;基于内部知识VM通常做什么。每个4字节或更少的数据类型总是占用4个字节,每隔一个数据类型(double,long)占用8个字节,指针占用4或8个字节,具体取决于您的体系结构。对象标头占用16个字节。使用反射,您可以查找字段并自己计算。但是,有很多东西可能会破坏你的手动计算,例如,压缩的oops可能会在64位机器上只有32位指针,...

所以,长话短说:除非你想建立一个代理人,否则你无法做到!

编辑:我想添加:Integer.Size为您提供&#34; int&#34;的大小,而不是&#34;整数&#34;的大小。对象!!!