簡體   English   中英

內存大小以字節為單位

[英]Memory Size of an object as byte

如果我有一個對象,例如......

String city = "Chicago"

我有數百萬。 假設我取這百萬個對象的字節,

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

字節會占用內存中較少的空間嗎?

編輯:更深入:

我有幾個com.microsoft.azure.servicebus.Message對象。 我打算使用Apache Commons Lang的SerializationUtils來獲取每個對象的字節數組並將其存儲在List中。

我想如果我在List中存儲100萬個Message對象,那可能會導致問題。 但是,如果我將相同的百萬個對象存儲為List中的字節數組,我將剩下更多的內存,以便我可以做其他事情。 因此問題。

我使用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上運行

約爾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM