我想记录一个对象为一个项目占用了多少内存(希望以字节为单位)(我正在比较数据结构的大小),似乎在 Java 中没有方法可以做到这一点。据说 C/C++ 有sizeOf()方法,但这在 Java 中是不存在的。我尝试在创建对象之前和之后记录 JVM 中的可用内存,Runtime.getRuntime().freeMemory()然后记录差异,但它只会给出 0 或 131304,而两者之间什么都没有,无论结构中的元素数量如何。请帮忙!
sizeOf()
Runtime.getRuntime().freeMemory()
您可以使用该java.lang.instrumentation软件包。
java.lang.instrumentation
它有一种方法可用于获取特定于实现的对象大小的近似值,以及与对象相关的开销。
谢尔盖链接的答案有一个很好的例子,我将在这里重新发布,但你应该已经从他的评论中看到了:
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:
getObjectSize
public class C { private int x; private int y; public static void main(String [] args) { System.out.println(ObjectSizeFetcher.getObjectSize(new C())); } }