我已针对此问题尝试了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();
}
}
答案 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;的大小。对象!!!