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+ 次浏览

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告