1. ホーム
  2. java

[解決済み] Javaで、オブジェクトの大きさを決定する最も良い方法は何ですか?

2022-03-15 14:33:05

質問

データ行が山積みされたCSVファイルを読み込むアプリケーションがあります。 データの種類に応じた行数のサマリーをユーザーに提供するのですが、あまりに多くのデータ行を読み込むと OutOfMemoryError s. 各行がオブジェクトに変換されます。 そのオブジェクトの大きさをプログラムで簡単に調べる方法はありますか? のプリミティブ型とオブジェクト参照の大きさを定義するリファレンスはありますか? VM ?

今現在、私は以下のようなコードを持っています。 32,000行 を使い切るまで、できるだけ多くの行を読むというコードも欲しいですね。 32MB のメモリが必要です。 それは別の質問かもしれませんが、それでも私は知りたいのです。

どのように解決するのですか?

を使用することができます。 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