我需要一个对象在运行时使用的内存用于某些分析目的。我使用netbeans 5.1,它不支持分析,由于项目兼容性,我无法使用更高版本的netbeans。请提供一些替代方案,并提供详细说明。
答案 0 :(得分:0)
这只是为了理解它是如何工作的:
例如,如果你有一个类:
public class A{
int i;
long l;
double a[]=new double[N];
}
内存成本如下:
1)对象开销:16字节
2)对于int i :4个字节
3)长 l :8字节
4)对于double类型的数组 a :8 * N(8个字节用于double *数组中的元素数)+24个字节开销+ 8个字节引用到数组
5)现在添加填充字节,以便总字节数可以被8整除 其他原语也类似。
答案 1 :(得分:0)
解决方案:将Object转换为ByteArrray并获取数组的长度。它也适用于较旧的Java版本。
import java.io.*;
class ObjectData implements Serializable{
private int id=1;;
private String name="sunrise76";
private String city = "Newyork";
private int dimensitons[] = {20,45,789};
}
public class ObjectSize{
public static void main(String args[]){
try{
ObjectData data = new ObjectData();
ByteArrayOutputStream b = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(b);
oos.writeObject(data);
System.out.println("Size:"+b.toByteArray().length);
}catch(Exception err){
err.printStackTrace();
}
}
}
程序输出" java ObjectSize"
尺寸:156