Java 中的陣列儲存在 JVM 記憶體的哪個位置?


陣列 是一個容器,可以容納固定數量的同類型實體。陣列的每個實體稱為元素,每個元素的位置由一個整數(從 0 開始)值表示,稱為索引。

示例

import java.util.Arrays;
public class ArrayExample {
   public static void main(String args[]) {
      Number integerArray[] = new Integer[3];
      integerArray[0] = 25;
      integerArray[1] = 32;
      integerArray[2] = 56;
      System.out.println(Arrays.toString(integerArray));
   }
}

輸出

[25, 32, 56]

陣列有兩種型別:

  • 一維陣列:普通陣列。
  • 多維陣列:儲存陣列的陣列。

JVM 記憶體位置

JVM 有五個記憶體位置,即:

  • - 執行時為物件(引用型別)分配儲存空間。
  • - 用於儲存區域性變數和部分結果。棧包含幀,併為每個執行緒分配一個幀。執行緒完成後,此幀也會被銷燬。它還在方法呼叫和返回中發揮作用。
  • PC 暫存器 - 程式計數器暫存器包含 JVM 當前正在執行的指令的地址。
  • 執行引擎 - 它有一個虛擬處理器,直譯器逐條解釋位元組碼指令,以及一個 JIT(即時編譯器)。
  • 本地方法棧 - 它包含應用程式使用的所有本地方法。

陣列的儲存

如上所述,Java 中的引用型別儲存在堆區。由於陣列是引用型別(我們可以使用 new 關鍵字建立它們),因此它們也儲存在堆區。

除了基本資料型別外,陣列還儲存引用型別:其他陣列(多維陣列)、物件。在這種情況下,物件陣列/多維陣列儲存物件/陣列的引用,這些引用指向物件/陣列的位置。

例如,如果我們有一個名為 Std 的類,其建構函式接受學生的姓名,並且我們已經定義了此類的陣列並如以下所示填充了它。

class Std {
   private String name;
   public Std(String name){
      this.name = name;
   }
}
public class Sample {
   public static void main(String args[]) throws Exception {
      //Creating an array to store objects of type Std
      Std myArray[] = new Std[3];
      //Populating the array
      myArray [0] = new Std("Ravi");
      myArray [1] = new Std("Raju");
      myArray [2] = new Std("Ramu");
   }
}

陣列 myArray 的記憶體可能如下所示:

更新於: 2020-07-02

4K+ 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.