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

问题:

例如,假设我有一个应用程序可以使用一堆数据行读取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

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: In Java, what is the best way to determine the size of an object?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

69 + = 70