小编典典

计算Java中对象的大小

java

我想记录一个对象占用一个项目的内存量(以字节为单位)(我正在比较数据结构的大小),并且似乎没有方法可以在Java中完成。据说C / C ++有sizeOf()方法,但这在Java中不存在。我尝试Runtime.getRuntime().freeMemory()在创建对象之前和之后记录JVM中的可用内存,然后记录差异,但是无论结构中元素的数量如何,它只会给出0或131304,并且两者之间什么都没有。请帮助!


阅读 653

收藏
2020-03-10

共1个答案

小编典典

你可以使用该java.lang.instrumentation软件包:

http://docs.oracle.com/javase/7/docs/api/java/lang/instrument/Instrumentation.html

它具有一种方法,可用于获取特定于实现的对象大小的近似值以及与对象相关的开销。

Sergey链接的答案有一个很好的例子,我将在这里重新发布,但是你应该已经从他的评论中进行了研究:

import java.lang.instrument.Instrumentation;

public class ObjectSizeFetcher {
    private static Instrumentation instrumentation;

    public static void premain(String args, Instrumentation inst) {
        instrumentation = inst;
    }

    public static long getObjectSize(Object o) {
        return instrumentation.getObjectSize(o);
    }
}

使用getObjectSize:

public class C {
    private int x;
    private int y;

    public static void main(String [] args) {
        System.out.println(ObjectSizeFetcher.getObjectSize(new C()));
    }
}
2020-03-10