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 的内存可能如下所示:
广告