在java中获取对象的内存使用情况

时间:2015-08-04 17:09:56

标签: java

我需要一个对象在运行时使用的内存用于某些分析目的。我使用netbeans 5.1,它不支持分析,由于项目兼容性,我无法使用更高版本的netbeans。请提供一些替代方案,并提供详细说明。

2 个答案:

答案 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