计算Java中对象的大小

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

回答:

你可以使用该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()));

}

}

以上是 计算Java中对象的大小 的全部内容, 来源链接: utcz.com/qa/420751.html

回到顶部