1

new演算子を使用して作成されたときに Java オブジェクトが割り当てられるサイズについて理解しようとしています。

クラスを作成していると考えてください

public class NewClass {

    NewClass() { }

}

NewClassusingのインスタンスを作成するときNewClass nc = new NewClass();NewClassヒープに作成されるのサイズは?

~ジェガン

4

2 に答える 2

9

プロファイリングが最善の方法ですが、次のように適切な見積もりを得ることができます。

オブジェクトごとに 8 バイト (ベア オーバーヘッド) とフィールド。

  • プリミティブ フィールド: Java に記載されています。注: ブール値には 1 バイトが必要です。
  • オブジェクト フィールド: 1 つのポインター (32 ビット VM では 4 バイト、64 ビット VM では 8 バイト)、およびオブジェクト自体のサイズ (既存のオブジェクトへの参照でない場合)
  • 配列: 4 バイト + オブジェクト/要素のプリミティブ
  • ストリングス: 遠すぎます。IIRC、24 バイト + 2 バイト/文字。もっとあるかもしれません。

最終結果は、最も近い 8 バイトの倍数に増加されます。

より複雑なオブジェクトのメモリ使用量を計算する方法については、こちらの例も参照してください。注: これらのルールは VM によって異なる場合があり、VM の新しいバージョンが登場すると変更される可能性があります。私の見積もりは Sun JVM にのみ適用されますが、IBM の結果も同様になると思います。

于 2010-01-14T06:44:09.303 に答える
0

これを測定するには、プロファイラーを使用する必要があると思います。これには、 JProfilerまたはYourKitプロファイラーを使用できます。

于 2010-01-14T06:31:21.750 に答える