Java 数组在内存中是什么样的?

x33g5p2x  于2022-09-25 转载在 Java  
字(0.7k)|赞(0)|评价(0)|浏览(192)

在 Java 中,数组存储原始值(int、char、...)或对象的引用(又名指针)。

当使用“new”创建对象时,会在堆中分配内存空间并返回引用。这也适用于数组,因为数组是 Java 中的对象。

1 一维数组

int arr[] = new int[3];

int[] arr 只是对 3 个整数数组的引用。如果你创建一个包含 10 个整数的数组,它是一样的——分配一个数组并返回一个引用。

2 二维数组

二维数组怎么样?实际上,Java 中只能有一维数组。二维数组只是一维数组的数组。

int[ ][ ] arr = new int[3][ ];
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[4];

多维数组与您想象的相似。

3 它们在内存中的位置?

数组也是 Java 中的对象,因此对象在内存中的样子适用于数组。

正如我们所知,JVM runtime data areas  包括堆、JVM 堆栈等。下面举一个简单的例子,让我们看看数组及其引用的存储位置。

class A {
	int x;
	int y;
}
 
...
 
public void m1() {
	int i = 0;
	m2();
}
 
public void m2() {
	A a = new A();
}
 
...

通过上面的声明,让我们调用 m1() 看看会发生什么:

1、当m1被调用时,一个新的帧(Frame-1)被压入栈中,并且在Frame-1中也创建了局部变量i。

  1. 然后在 m1 内部调用 m2,另一个新帧(Frame-2)被压入堆栈。在 m2 中,在堆中创建了一个 A 类的对象,并将引用变量放在 Frame-2 中。现在,此时堆栈和堆如下所示:

数组的处理方式与对象相同,因此数组在内存中的位置很简单。

相关文章

微信公众号

最新文章

更多