小编典典

在Java中计算对象的大小

all

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


阅读 74

收藏
2022-08-24

共1个答案

小编典典

您可以使用该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

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

    public static void main(String [] args) {
        System.out.println(ObjectSizeFetcher.getObjectSize(new C()));
    }
}
2022-08-24