繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM