小编典典

在 Java 中,确定对象大小的最佳方法是什么?

all

我有一个应用程序可以读取包含大量数据行的 CSV
文件。我根据数据的类型给用户总结了行数,但是我想确保我没有读入太多的数据行并导致OutOfMemoryErrors。每行转换为一个对象。有没有一种简单的方法可以以编程方式找出该对象的大小?是否有一个参考定义了原始类型和对象参考的大小VM

现在,我的代码说 read up to 32,000 rows ,但我也希望代码说 read as many rows as possible
直到我使用了 32MB 内存。也许这是一个不同的问题,但我仍然想知道。


阅读 71

收藏
2022-03-04

共1个答案

小编典典

您可以使用该java.lang.instrument软件包

编译这个类并将其放入一个 JAR 中:

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);
    }
}

将以下内容添加到您的MANIFEST.MF:

Premain-Class: ObjectSizeFetcher

使用getObjectSize()方法:

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

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

调用:

java -javaagent:ObjectSizeFetcherAgent.jar C
2022-03-04