検索

ホームページ  >  に質問  >  本文

android - java中使用MAT是shallow size 单位是什么

java中shallow size 单位是什么

伊谢尔伦伊谢尔伦2802日前897

全員に返信(1)返信します

  • 天蓬老师

    天蓬老师2017-04-18 10:51:59

    浅いサイズを明確に説明したい場合は、保持サイズについて言及する必要があります。
    浅いサイズ: 独自のオブジェクトが占めるサイズを示します。
    保持サイズ: 自身のオブジェクト + 参照オブジェクトの保持サイズ。

    まず、この図を借りてみましょう。この図は、それらの間の計算関係をより明確に表すことができます。

    Bの浅いサイズ = B;

    B の保持サイズ = B の浅いサイズ + C の保持サイズ + D の保持サイズ;

    例を示す前に、まずヒープ内の JAVA オブジェクトのストレージを理解する必要があります。例として 32 ビット JVM 仮想マシンを取り上げます。
    JAVA オブジェクトはヒープ内の 3 つの部分で構成されます。

    1. オブジェクト ヘッダー

      オブジェクト ヘッダーには 2 つのデータ部分が含まれています。
      1 つは実行時データです。 32 ビット JVM は 32 ビット、つまり 4 バイトです。 64 ビットは 8 バイトです。
      2: 型ポインター。

    2. インスタンスデータ

      は、インスタンス変数を格納するデータであり、変数の型には2つの基本型変数と参照変数があります。
      基本型変数が占めるバイトのサイズについては話さないようにしましょう。参照変数の場合、ポインターが格納されます。

    3. データの埋め込み

      オブジェクトの保存領域が 8byte の整数倍である場合、オブジェクトヘッダー + インスタンスデータが 8byte の整数倍未満の場合、埋められます。

    参照型のサイズについて言えば、32 ビット仮想マシンでは参照は 4 バイトを占有しますが、64 ビット仮想マシンでポインタ圧縮が有効になっていない場合、参照は 8 バイトを占有します。

    以下、例に基づいて説明しましょう:

    リーリー

    浅いサイズはインスタンス変数に参照があるかどうかとは関係がないため、まず **TestObjSize の浅いサイズを分析します。

    浅いサイズ = 4byte (オブジェクト ヘッダー) + 4byte (型ポインター) + 4byte (int a) + 1byte (boolean b ) + 4byte (TestObjSize 参照) = 17;**
    17 は 8 の整数倍ではないため、TestObjSize タイプのインスタンス オブジェクトの最終的な浅いサイズは 7 バイトになります。 ;

    例によると、obj2 オブジェクトの testObjSize = null、

    obj2 の保持サイズ = obj2 の浅いサイズ = 24;
    obj1 オブジェクトの testObjSize は obj2 であるため、obj1 の保持サイズ = obj1 の浅いサイズ + obj2 の保持サイズ = 48;

    最後にヒープダンプをアタッチします!

    間違いがありましたら、教えてください。

    返事
    0
  • キャンセル返事