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で実行します