簡體   English   中英

Java 2d數組的大小

[英]Size of 2d array in Java

我用Java定義了一個二維數組。 當我讀到它(即2d數組)時,這個2d數組的第一個維度是一個指針(我不知道它是否正確,請告訴我)。 因此,如果我將其視為指針,在64位系統中,執行后以下代碼的大小是多少?

    short [][] array1 = new short [10][];
    short[][] array2 = new short[10][];
    for (int i = 0; i < 10; i++)
        array1[i] = new short[1];
    for (int i = 0; i < 10; i++)            
            array2[i] = array1[i];         

請告訴我上述代碼的大小。

對於每個一維數組,除了數組中數據的空間外,您還有24字節的開銷。

  • 因此,您的前兩行代碼分別創建了一個包含10個指針的數組-對此您是正確的-在64位系統上,每個指針占用8個字節。 這意味着您正在分配2 *(24 + 10 * 8)= 208個字節。
  • 在第一個for循環中,您將創建10個數組,每個數組均為24 + 2 * 10 = 44字節。 這些被填充到至少8個字節的邊界,因此總共占用48個字節或480個字節。
  • 在第二個循環中,您沒有分配任何新的內存。
  • 總共使用的是208 + 480 = 688字節。

請注意,實際用法取決於JVM。 例如:

  • 一些JVM 壓縮指針
  • 一些JVM僅將12個字節的標頭用於數組。

為了查看外部數組和內部數組之間的差異,像這樣重寫代碼可能會有所幫助:

short[][] outerArray = new short[10][]; // Array of references to short arrays
short[] innerArray;                     // Array of shorts
for (int i = 0; i < 10; i++) {
  innerArray = new short[1];
  outerArray[i] = innerArray;
}

暫無
暫無

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

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