[英]Getting memory usage by an object in java
为了某种分析目的,我需要对象在运行时使用的内存。 我正在使用不支持概要分析的netbeans 5.1,并且由于项目兼容性而无法使用更高版本的netbeans。 请提出一些替代方案,并提供详细说明。
这只是为了了解其工作原理:
例如,如果您有一个类似的课程:
public class A{
int i;
long l;
double a[]=new double[N];
}
内存成本如下:
1)对象开销:16个字节
2)对于in i :4个字节
3)对于长l :8个字节
4)对于double a类型的数组:8 * N(8个字节表示double *数组中元素的数量)+24字节开销+8字节对数组的引用
5)现在,添加填充字节,以使字节的总和被8整除。
其他原语也是如此。
解决方案:将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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.