バイトなどのオブジェクトのメモリサイズ

Faraz:

私は、例えば、オブジェクトを持っている場合...

String city = "Chicago"

そして私はそれらの何百万を持っています。レッツは、私はそれらの百万個のオブジェクトのバイトを取ると言います

byte[] cityByte = "Chicago".getBytes()

うは、メモリ内のより少ないスペースを取るバイト?

編集:より詳細な:

私はいくつか持っているcom.microsoft.azure.servicebus.Messageのオブジェクトを。私が使用するつもりSerializationUtils各オブジェクトのバイト配列を取得し、リストに保存するのApache Commonsのラングからを。

私は100万メッセージがリスト内のオブジェクト格納する場合、それは問題を引き起こすかもしれないと考えていました。私は、リストのバイト配列と同じ百万個のオブジェクトを格納する場合でも、私は他のものを行うことができるように少しより多くのメモリが残っています。そこで質問です。

マシューI.:

私はJOL使用1を実行時にメモリ内のオブジェクトの実際のサイズを決定します。

import org.openjdk.jol.info.GraphLayout;

public class MainClass {

    public static void main(String[] args) {

        String city = "Chicago";

        byte[] cityByte = "Chicago".getBytes();

        System.out.println(GraphLayout.parseInstance(city).toPrintable());
        System.out.println(GraphLayout.parseInstance(cityByte).toPrintable());
    }
}

出力:

java.lang.String@4d7e1886d object externals:
          ADDRESS       SIZE TYPE             PATH                           VALUE
        76ac826d8         24 java.lang.String                                (object)
        76ac826f0         32 [C               .value                         [C, h, i, c, a, g, o]


[B@3caeaf62d object externals:
          ADDRESS       SIZE TYPE PATH                           VALUE
        76ac82738         24 [B                                  [67, 104, 105, 99, 97, 103, 111]

結論: '文字列' 32 VSバイト'バイト[]' 24のバイト

PSの結果は異なる場合がありますJVMのバージョンやオプションによって異なります。お使いの環境で同じアプローチを試してみてください。jdk_1.8.0_161 Mac OSの10.14で実行します

JOL

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=207561&siteId=1