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

我有一个应用程序,它读取带有大量数据行的CSV文件。我根据数据类型为用户提供了行数的摘要,但我想确保不会读取太多的数据行并导致OutOfMemoryErrors。每行转换为一个对象。有没有一种简便的方法以编程方式找出该对象的大小?是否有一个引用定义了一个原始类型和对象引用有多大VM?

现在,我的代码可以读取多达32,000行,但我还想让代码显示尽可能多地读取行,直到使用32 MB内存为止。也许这是一个不同的问题,但我仍然想知道。

回答:

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

以上是 在Java中,确定对象大小的最佳方法是什么? 的全部内容, 来源链接: utcz.com/qa/420931.html

回到顶部