1. ホーム
  2. java

[解決済み] Javaでオブジェクトのサイズを計算する [重複]。

2022-04-28 18:25:40

質問

あるプロジェクトで、オブジェクトがどれだけのメモリを消費しているかを(できればバイトで)記録したいのですが(データ構造のサイズを比較しています)、Javaでこれを行う方法はないようです。おそらく、C/C++には sizeOf() メソッドがありますが、これはJavaには存在しません。私は、JVMで空きメモリを記録するために Runtime.getRuntime().freeMemory() オブジェクトを作成する前と後で、その差を記録するのですが、構造体の要素数に関係なく、0か131304しか出ず、その中間は何も出ません。助けてください。

解決方法は?

を使用することができます。 java.lang.instrumentation パッケージを使用します。

オブジェクトのサイズと、オブジェクトに関連するオーバーヘッドの実装固有の近似値を取得するために使用できるメソッドを備えています。

Sergeyがリンクした回答には素晴らしい例があるので、ここに再掲載しますが、彼のコメントからすでに見ているはずです。

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

使用方法 getObjectSize :

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

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

ソース