Java数组在内存中是如何存放的

Java数组在内存中是如何存放的
一维数组
int[] arr = new int[3];
二维数组
int[ ][ ] arr = new int[3][ ];
arr[0] = new int[3];
arr[1] = new int[5];
arr[2] = new int[4];
数组对象及其引用存放在内存中的哪里?
在Java中,数组同样是一个对象,所以对象在内存中如何存放同样适用于数组。
正如我们都知道的,java运行时数据区包括堆,JVM栈和其它。如下代码是一个小例子,那么就让我们来看看数组和它的引用在内存中是如何存放的:
class A {
int x;
int y;
}
...
public void m1() {
int i = 0;
m2();
}
public void m2() {
A a = new A();
}
...
如上代码,让我们来调用方法m1,看看发生了什么:
当m1被调用的时候,栈帧Frame-1被创建并push到栈中,同时局部变量i也在栈帧Frame-1内创建。
然后,m2方法在m1方法内部被调用,栈帧Frame-2被创建并push到栈中,在m2方法中,一个新的对象A在堆中被创建,而它的引用则被put到栈帧Frame-2里;
现在内存中堆和栈的大致情况如下图:
数组同样是对象,所以数组和对象以及引用在内存中的分布如上所示。