我有一个应用程序可以读取包含大量数据行的 CSV 文件。我根据数据类型向用户提供行数摘要,但我想确保不会读取太多数据行并导致 OutOfMemoryError
。每一行都转换为一个对象。有没有办法以编程方式找出该对象的大小?是否有一个引用定义 VM
的基本类型和对象引用有多大?
现在,我的代码显示最多读取 32,000 行,但我还希望有代码显示读取尽可能多的行,直到我使用 32MB 内存。
最佳答案
您可以使用java.lang.instrument
package .
编译此类并将其放入 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 - Java中如何确定对象的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847731/